ð® ELDRA UIã»æäœæ§å®å šã¬ã€ãããã仿§ã€ã³ã¿ãŒãã§ãŒã¹è§£èª¬ã
䜿ãããããããåå©ãžã®è¿éãELDRAã®çŽæçã€ã³ã¿ãŒãã§ãŒã¹ã§ããã¬ãŒãå¹çãåçåäž
ð¯ åªããUIããã¬ãŒãæçžŸã«äžãã圱é¿
ãã¬ãŒãã«ãããŠ**ãæäœæ§ãã¯èŠéããããã¡ã§ãããå®ã¯åæãå·Šå³ããéèŠãªèŠçŽ **ã§ããELDRAã¯ããããã¬ãŒããŒãæ±ããæäœæ§ãã培åºçã«è¿œæ±ããã¹ãã¬ã¹ããªãŒãªãã¬ãŒãç°å¢ãå®çŸããŠããŸãã
ð UIå質ããããã广
â¡ åªããUIã®åšå
âââ æ³šæé床50%åäž â çŽå®ç倧å¹
ã¢ãã
âââ æäœãã¹90%åæž â ç¡é§ãªæå€±ãæ ¹çµ¶
âââ ã¹ãã¬ã¹70%è»œæž â å·éãªå€æç¶æ
âââ åŠç¿æé60%ççž® â å³åº§ã«å®æŠæå
¥å¯èœ
ð¥ïž ELDRAã®UIèšèšææ³
ãã¶ã€ã³ã³ã³ã»ãã
ðš ELDRA UIèšèšåç
âââ ãäžç®ã§åãããæ
å ±é
眮
âââ ãã¯ã³ã¯ãªãã¯ã§å®è¡ãæäœæ§
âââ ããã¹ãã«ãããå®å
šèšèš
âââ ãã«ã¹ã¿ãã€ãºèªåšãæè»æ§
// ELDRAã®UIèšèšãã©ã¡ãŒã¿ãŒ
static int ButtonHeight = 30; // æšæºãã¿ã³é«ã
static int SmallButtonHeight = 24; // å°ãã¿ã³é«ã
static int MiniButtonHeight = 20; // ãããã¿ã³é«ã
static int HeaderHeight = 50; // ããããŒé«ã
static int Margin = 8; // ããŒãžã³
static int ButtonGap = 4; // ãã¿ã³ééé
ðïž ã¡ã€ã³ããã«ã®æ§æãšæ©èœ
ããã«å šäœæ§é
ð± ELDRAã¡ã€ã³ããã«æ§æ
âââââââââââââââââââââââââââââââ
â ð·ïž ELDRA Main Panel â â ããããŒ
âââââââââââââââââââââââââââââââ€
â ð¹ äŸ¡æ Œæ
å ±ã»èšŒæ é衚瀺 â â æ
å ±ãšãªã¢
âââââââââââââââââââââââââââââââ€
â ðµ Buy ðŽ Sell â« Close â â æ³šæãã¿ã³
âââââââââââââââââââââââââââââââ€
â ð ããã: 0.01 â¬ïž â¬ïž â â ããã調æŽ
âââââââââââââââââââââââââââââââ€
â ð¯ SL/TPèšå®ãã¿ã³çŸ€ â â SL/TP管ç
âââââââââââââââââââââââââââââââ€
â ð ããžã·ã§ã³æ
å ±è¡šç€º â â ããžã·ã§ã³ç®¡ç
âââââââââââââââââââââââââââââââ
äž»èŠãã¿ã³ã®æ©èœ
// ã¡ã€ã³ããã«ãã¿ã³å®çŸ©
string MainPanelButtons[] = {
"Buy", // è²·ãæ³šæïŒç·è²ïŒ
"Sell", // å£²ãæ³šæïŒèµ€è²ïŒ
"Close", // å
šæ±ºæžïŒã°ã¬ãŒïŒ
"VolUp", // ãããå¢å ïŒéäžç¢å°ïŒ
"VolDown", // ãããæžå°ïŒéäžç¢å°ïŒ
"Limit", // æå€ã¢ãŒãïŒéè²ïŒ
"Stop", // éæå€ã¢ãŒãïŒæ©è²ïŒ
"Settings" // èšå®ç»é¢ïŒæ¯è»ã¢ã€ã³ã³ïŒ
};
ðµ ã¯ã³ã¯ãªãã¯æ³šæã·ã¹ãã
ç¬ææ³šæã®ä»çµã¿
ELDRAã®ã¯ã³ã¯ãªãã¯æ³šæã¯ããã仿§ã®é«éå®è¡ãå®çŸããŠããŸãã
// ã¯ã³ã¯ãªãã¯æ³šæåŠç
void ExecuteOneClickOrder(string buttonName) {
if(buttonName == "Buy") {
// è²·ãæ³šæå®è¡
double lotSize = GetCurrentLotSize();
double sl = CalculateStopLoss(OP_BUY);
double tp = CalculateTakeProfit(OP_BUY);
// å³åº§ã«æ³šæå®è¡
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, sl, tp,
"ELDRA_Buy", MagicNumber, 0, Green);
// çµæéç¥
if(ticket > 0) {
PlaySound("ok.wav");
ShowNotification("è²·ãæ³šæçŽå®: " + DoubleToString(Ask, Digits));
}
}
}
泚æç¢ºèªã·ã¹ãã
â
å®å
šãªæ³šæãããŒ
âââ 1. ãã¿ã³ã¯ãªãã¯
âââ 2. å³åº§ã«ãã¬ãã¥ãŒè¡šç€º
âââ 3. èšå®å€ã®èªåé©çš
âââ 4. ãªã¹ã¯ãã§ãã¯å®è¡
âââ 5. åé¡ãªããã°å³åº§ã«çŽå®
ð æ å ±ããã«ã®è©³çް
ãªã¢ã«ã¿ã€ã æ å ±è¡šç€º
// æ
å ±ããã«æŽæ°ã·ã¹ãã
void UpdateInfoPanel() {
// åºæ¬äŸ¡æ Œæ
å ±
ObjectSetString(0, InfoPanel+"Bid", OBJPROP_TEXT,
"Bid: " + DoubleToString(Bid, Digits));
ObjectSetString(0, InfoPanel+"Ask", OBJPROP_TEXT,
"Ask: " + DoubleToString(Ask, Digits));
ObjectSetString(0, InfoPanel+"Spread", OBJPROP_TEXT,
"Spread: " + IntegerToString(GetCurrentSpread()));
// å£åº§æ
å ±
ObjectSetString(0, InfoPanel+"Balance", OBJPROP_TEXT,
"æ®é«: " + DoubleToString(AccountBalance(), 0) + "å");
ObjectSetString(0, InfoPanel+"Equity", OBJPROP_TEXT,
"æå¹èšŒæ é: " + DoubleToString(AccountEquity(), 0) + "å");
ObjectSetString(0, InfoPanel+"FreeMargin", OBJPROP_TEXT,
"äœå°èšŒæ é: " + DoubleToString(AccountFreeMargin(), 0) + "å");
// ããžã·ã§ã³æ
å ±
int buyCount = PositionCount(OP_BUY);
int sellCount = PositionCount(OP_SELL);
ObjectSetString(0, InfoPanel+"Positions", OBJPROP_TEXT,
"ããžã·ã§ã³: è²·ã" + IntegerToString(buyCount) +
" 売ã" + IntegerToString(sellCount));
}
è²åã衚瀺ã·ã¹ãã
ðš èŠèŠçæ
å ±è¡šç€º
âââ ç·è²ïŒå©çã»è²·ãããžã·ã§ã³ã»äžæ
âââ èµ€è²ïŒæå€±ã»å£²ãããžã·ã§ã³ã»äžé
âââ éè²ïŒäžç«ã»èšå®ã»æ
å ±
âââ æ©è²ïŒèŠåã»æ³šæã»éèŠ
âââ ã°ã¬ãŒïŒéã¢ã¯ãã£ãã»ç¡å¹
ð±ïž ãã£ãŒã飿ºæ©èœ
ããŠã¹æäœã·ã¹ãã
// ãã£ãŒãã€ãã³ãåŠç
void OnChartEvent(const int id, const long &lparam,
const double &dparam, const string &sparam) {
// ããŠã¹ç§»åã€ãã³ã
if(id == CHARTEVENT_MOUSE_MOVE && (limit_switch_on || stop_switch_on)) {
int sub_window;
datetime time;
double price;
// ããŠã¹äœçœ®ã®äŸ¡æ ŒååŸ
if(ChartXYToTimePrice(0, (int)lparam, (int)dparam,
sub_window, time, price) && sub_window == 0) {
// æ°Žå¹³ç·ã衚瀺
UpdateHoverLine(price, limit_switch_on);
// å©çã»æå€±ããã¬ãã¥ãŒè¡šç€º
ShowProfitLossPreview(price);
}
}
// ãã£ãŒãã¯ãªãã¯ã€ãã³ã
else if(id == CHARTEVENT_CLICK) {
if(limit_switch_on || stop_switch_on) {
double price = ChartGetPrice(lparam, dparam);
HandleChartClickOrder(price);
}
}
}
ãã©ãã°&ããããæ³šæ
ð±ïž çŽæçãã£ãŒãæäœ
âââ 1. ãLimitããŸãã¯ãStopããã¿ã³æŒäž
âââ 2. ãã£ãŒãäžãããŠã¹ãããŒ
âââ 3. ãªã¢ã«ã¿ã€ã ã§æ°Žå¹³ç·è¡šç€º
âââ 4. ã¯ãªãã¯ã§å³åº§ã«æ³šæå®è¡
âââ 5. èªåçã«SL/TPèšå®é©çš
ð¯ ããã調æŽã·ã¹ãã
åçããããµã€ãºèª¿æŽ
// ãããèª¿æŽæ©èœ
void AdjustLotSize(string direction) {
if(direction == "UP") {
// ãããå¢å
double newLot = CurrentLotSize + LotStepSize;
if(newLot <= MaxLotSize) {
CurrentLotSize = NormalizeDouble(newLot, 2);
PlaySound("tick.wav");
} else {
ShowNotification("æå€§ããããµã€ãºã«å°é");
}
}
else if(direction == "DOWN") {
// ãããæžå°
double newLot = CurrentLotSize - LotStepSize;
if(newLot >= MinLotSize) {
CurrentLotSize = NormalizeDouble(newLot, 2);
PlaySound("tick.wav");
} else {
ShowNotification("æå°ããããµã€ãºã«å°é");
}
}
// ããã«è¡šç€ºãæŽæ°
ObjectSetString(0, MainPanel+"VolValue", OBJPROP_TEXT,
DoubleToString(CurrentLotSize, 2));
}
ã¹ã©ã€ããŒåŒèª¿æŽ
ð ããã調æŽUI
âââââââââââââââââââââââââââ
â ããã: [0.01] â¬ïž â¬ïž â
â âââââââââââââââââââ â â ã¹ã©ã€ããŒè¡šç€º
â 0.01 0.05 0.10 â
âââââââââââââââââââââââââââ
ðš ã«ã¹ã¿ãã€ãºæ©èœ
ããŒãã»ã«ã©ãŒèšå®
// ã«ã¹ã¿ãã€ãºèšå®
input color ButtonColor = C'240,240,240'; // ãã¿ã³è²
input color ButtonActiveColor = C'100,150,255'; // ã¢ã¯ãã£ããã¿ã³è²
input color ProfitColor = clrGreen; // å©çè²
input color LossColor = clrRed; // æå€±è²
input color InfoTextColor = clrWhite; // æ
å ±ããã¹ãè²
input int PanelTransparency = 255; // ããã«éæåºŠ
input bool ShowAnimations = true; // ã¢ãã¡ãŒã·ã§ã³è¡šç€º
ããã«äœçœ®ã»ãµã€ãºèª¿æŽ
âïž ã«ã¹ã¿ãã€ãºé
ç®
âââ ããã«äœçœ®ïŒ4é
ããéžæïŒ
âââ ããã«ãµã€ãºïŒå°ã»äžã»å€§ïŒ
âââ ãã¿ã³ãµã€ãºïŒã³ã³ãã¯ãã»æšæºã»å€§åïŒ
âââ ãã©ã³ããµã€ãºïŒ8-16ptïŒ
âââ éæåºŠèšå®ïŒ0-255ïŒ
âââ è²ããŒãïŒããŒã¯ã»ã©ã€ãã»ã«ã¹ã¿ã ïŒ
âââ 衚瀺é
ç®éžæïŒå¿
èŠãªæ
å ±ã®ã¿è¡šç€ºïŒ
ð± ããžã·ã§ã³ç®¡çããã«
ããžã·ã§ã³æ å ±ã®äžèŠ§è¡šç€º
// ããžã·ã§ã³ç®¡çããã«
void UpdatePositionInfoPanel() {
string posInfo = "";
double totalProfit = 0;
// å
šããžã·ã§ã³æ
å ±ãååŸ
for(int i = 0; i < OrdersTotal(); i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol() == Symbol()) {
// ããžã·ã§ã³æ
å ±ãæŽåœ¢
posInfo += OrderTypeToString(OrderType()) + " " +
DoubleToString(OrderLots(), 2) + " " +
DoubleToString(OrderProfit(), 0) + "å\n";
totalProfit += OrderProfit() + OrderSwap() + OrderCommission();
}
}
}
// ããã«ã«è¡šç€º
ObjectSetString(0, PosInfoPanel+"List", OBJPROP_TEXT, posInfo);
ObjectSetString(0, PosInfoPanel+"Total", OBJPROP_TEXT,
"åèšæç: " + DoubleToString(totalProfit, 0) + "å");
// è²åã衚瀺
color profitColor = (totalProfit >= 0) ? ProfitColor : LossColor;
ObjectSetInteger(0, PosInfoPanel+"Total", OBJPROP_COLOR, profitColor);
}
ã¯ã³ã¯ãªãã¯æ±ºæžæ©èœ
ð° æ±ºæžãªãã·ã§ã³
âââ ð å
šæ±ºæžïŒãã¹ãŠã®ããžã·ã§ã³ïŒ
âââ ð å©ç決æžïŒãã©ã¹ããžã·ã§ã³ã®ã¿ïŒ
âââ ð æå€±æ±ºæžïŒãã€ãã¹ããžã·ã§ã³ã®ã¿ïŒ
âââ ðµ è²·ãã®ã¿æ±ºæžïŒè²·ãããžã·ã§ã³å
šãŠïŒ
âââ ðŽ å£²ãã®ã¿æ±ºæžïŒå£²ãããžã·ã§ã³å
šãŠïŒ
âââ ð éžææ±ºæžïŒåå¥éžæïŒ
â¡ é«éæäœãã¯ããã¯
ããŒããŒãã·ã§ãŒãã«ãã
// ããŒããŒãã·ã§ãŒãã«ããåŠç
void OnChartEvent(const int id, const long &lparam,
const double &dparam, const string &sparam) {
if(id == CHARTEVENT_KEYDOWN) {
switch((int)lparam) {
case 66: // 'B'ã㌠- è²·ãæ³šæ
ExecuteOneClickOrder("Buy");
break;
case 83: // 'S'ã㌠- å£²ãæ³šæ
ExecuteOneClickOrder("Sell");
break;
case 67: // 'C'ã㌠- å
šæ±ºæž
CloseAllPositions();
break;
case 187: // '+'ã㌠- ãããå¢å
AdjustLotSize("UP");
break;
case 189: // '-'ã㌠- ãããæžå°
AdjustLotSize("DOWN");
break;
}
}
}
ãã仿§æäœæ³
â¡ é«éæäœãã¯ããã¯
âââ B â è²·ãæ³šæ
âââ S â å£²ãæ³šæ
âââ C â å
šæ±ºæž
âââ + â ãããå¢å
âââ - â ãããæžå°
âââ L â æå€ã¢ãŒãåæ¿
âââ T â éæå€ã¢ãŒãåæ¿
âââ ESC â å
šã¢ãŒãè§£é€
ð§ ãã©ãã«ã·ã¥ãŒãã£ã³ã°
ããããæäœåé¡ãšè§£æ±ºæ³
â ããããåé¡ãšè§£æ±º
âââ ãã¿ã³ãåå¿ããªã
â â ãã£ãŒãå³ã¯ãªãã¯ããšãã¹ããŒãã¢ããã€ã¶ãŒããèš±å¯ã確èª
âââ ããã«ã衚瀺ãããªã
â â F8ããŒâãå
šè¬ãã¿ãâãDLLã€ã³ããŒããèš±å¯
âââ æ³šæãéããªã
â â ååŒæéã»ã¹ãã¬ããã»èšŒæ éã確èª
âââ 衚瀺ã厩ãã
â â ãã£ãŒãåèµ·åãŸãã¯EAåèªã¿èŸŒã¿
âââ åäœãéã
â â äžèŠãªã€ã³ãžã±ãŒã¿ãŒãåé€ã»EAèšå®èŠçŽã
ããã©ãŒãã³ã¹æé©å
// UIæé©åèšå®
input bool OptimizeUI = true; // UIæé©åæå¹
input int UIUpdateInterval = 500; // UIæŽæ°ééïŒmsïŒ
input bool ReduceAnimations = false; // ã¢ãã¡ãŒã·ã§ã³åæž
input bool MinimalMode = false; // æå°è¡šç€ºã¢ãŒã
ð æäœæ§æ¹åã®å®äŸ
æäœæéççž®å¹æ
â±ïž æäœæéæ¯èŒ
åŸæ¥ã®MT4æäœïŒ
âââ æ³šæãŸã§ïŒ8ã¯ãªãã¯ã»15ç§
âââ æ±ºæžãŸã§ïŒ6ã¯ãªãã¯ã»10ç§
âââ ããã倿ŽïŒ5ã¯ãªãã¯ã»8ç§
âââ åèšïŒ19ã¯ãªãã¯ã»33ç§
ELDRAã¯ã³ã¯ãªãã¯æäœïŒ
âââ æ³šæãŸã§ïŒ1ã¯ãªãã¯ã»2ç§
âââ æ±ºæžãŸã§ïŒ1ã¯ãªãã¯ã»1ç§
âââ ããã倿ŽïŒ1ã¯ãªãã¯ã»1ç§
âââ åèšïŒ3ã¯ãªãã¯ã»4ç§ïŒ-88%ççž®ïŒ
ãã¹åæžå¹æ
ð æäœãã¹åæžå®çžŸ
âââ æ³šæééãïŒ90%åæžïŒèŠèŠçãã¬ãã¥ãŒã§ç¢ºèªïŒ
âââ æ°éééãïŒ85%åæžïŒã¯ã³ã¯ãªãã¯èª¿æŽæ©èœïŒ
âââ SL/TPèšå®å¿ãïŒ95%åæžïŒèªåèšå®æ©èœïŒ
âââ æäœãã¹å
šäœïŒ88%åæž
ð ãŸãšãïŒçŽæçæäœã®æ¥µæ
UIæŽ»çšæåã®åå
ð UIæŽ»çšæåã®éå
âââ 1. æåã«ã«ã¹ã¿ãã€ãºãå®ç§ã«èšå®
âââ 2. ã·ã§ãŒãã«ããããŒãç¿åŸ
âââ 3. ãã¬ãã¥ãŒæ©èœãç©æ¥µæŽ»çš
âââ 4. 宿çãªèšå®èŠçŽããšæé©å
âââ 5. æäœãããŒã®ç¶ç¶çæ¹å
ELDRA UIç¿åŸããŒãããã
ð UIç¿åŸæ®µé
âââ åçŽïŒåºæ¬ããã«æäœã®ç¿åŸ
âââ äžçŽïŒãã£ãŒã飿ºæ©èœã®æŽ»çš
âââ äžçŽïŒã«ã¹ã¿ãã€ãºãšã·ã§ãŒãã«ãã
âââ å°éïŒé«éæäœãã¯ããã¯ãã¹ã¿ãŒ
âââ ãšãã¹ããŒãïŒç¬èªæäœãããŒç¢ºç«
次åã®èšäºã§ã¯ãELDRAã®ãããã¯ãã¹ãã»æé©åãã«ã€ããŠè©³ãã解説ããŸããæ€èšŒæ©èœãšãã©ã¡ãŒã¿ãŒèª¿æŽã§ãæŠç¥ãç§åŠçã«æé©åããæ¹æ³ããå±ãããŸãã