回溯测试/优化 - 页 47 1...404142434445464748495051525354...95 新评论 polohot 2008.10.12 16:43 #461 #property copyright "HS" #property link "" //---- input parameters extern bool AccountIsIBFXmini=false; extern double Lots=0.1; extern double MaximumRisk=0.03; extern double DecreaseFactor=300; extern double MinLot=0.01; extern int Slippage=3; extern double TrailingStop=30; double StartBalance,StartEquity; extern bool UseHourTrade = false; extern int FromHourTrade = 6; extern int ToHourTrade = 18; //---- global variables int dir=0; int openorders=0; int cnt; string pair; int MagicNumber; int bsflag=0; int bstarget=0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { if (Symbol() == "AUDCADm" || Symbol() == "AUDCAD") { MagicNumber = 427101; } if (Symbol() == "AUDJPYm" || Symbol() == "AUDJPY") { MagicNumber = 427102; } if (Symbol() == "AUDNZDm" || Symbol() == "AUDNZD") { MagicNumber = 427103; } if (Symbol() == "AUDUSDm" || Symbol() == "AUDUSD") { MagicNumber = 427104; } if (Symbol() == "CHFJPYm" || Symbol() == "CHFJPY") { MagicNumber = 427105; } if (Symbol() == "EURAUDm" || Symbol() == "EURAUD") { MagicNumber = 427106; } if (Symbol() == "EURCADm" || Symbol() == "EURCAD") { MagicNumber = 427107; } if (Symbol() == "EURCHFm" || Symbol() == "EURCHF") { MagicNumber = 427108; } if (Symbol() == "EURGBPm" || Symbol() == "EURGBP") { MagicNumber = 427109; } if (Symbol() == "EURJPYm" || Symbol() == "EURJPY") { MagicNumber = 427110; } if (Symbol() == "EURUSDm" || Symbol() == "EURUSD") { MagicNumber = 427111; } if (Symbol() == "GBPCHFm" || Symbol() == "GBPCHF") { MagicNumber = 427112; } if (Symbol() == "GBPJPYm" || Symbol() == "GBPJPY") { MagicNumber = 427113; } if (Symbol() == "GBPUSDm" || Symbol() == "GBPUSD") { MagicNumber = 427114; } if (Symbol() == "NZDJPYm" || Symbol() == "NZDJPY") { MagicNumber = 427115; } if (Symbol() == "NZDUSDm" || Symbol() == "NZDUSD") { MagicNumber = 427116; } if (Symbol() == "USDCHFm" || Symbol() == "USDCHF") { MagicNumber = 427117; } if (Symbol() == "USDJPYm" || Symbol() == "USDJPY") { MagicNumber = 427118; } if (Symbol() == "USDCADm" || Symbol() == "USDCAD") { MagicNumber = 427119; } if (MagicNumber == 0) { MagicNumber = 427199; } pair = Symbol(); return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int GetCurrentOrders() { //---- calc open OrderSelect openorders=0; dir=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) { openorders+=1; if(OrderType()==OP_BUY) dir=1; if(OrderType()==OP_SELL) dir=-1; } } } //+-------------------End Calculate open positions-------------------+ //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); // history orders total int losses=0; // number of losses orders without a break //---- select lot size lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/500.0,1); //---- calculate number of losses orders without a break if(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber || OrderType()>OP_SELL) continue; //---- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } //---- return lot size if(lot>999) lot=999; if(lot<MinLot) lot=MinLot; return(lot); } //+-------------------End Calculate optimal lot size-----------------+ //+------------------------------------------------------------------+ //| Close Open Position | //+------------------------------------------------------------------+ int CloseTrade() { for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) { if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3,Yellow); if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow); } } } //+----------------------End Close Open Position---------------------+ //+------------------------------------------------------------------+ //| Open Trade Position | //+------------------------------------------------------------------+ int OpenTrade() { int vLots=LotsOptimized(); if (bsflag==1) OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,Slippage,0,Ask+bstarget*Point,"NoLoss",MagicNumber,0,Green); if (bsflag==2) OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,Slippage,0,Ask-bstarget*Point,"NoLoss",MagicNumber,0,Red); } //+----------------------End Open Trade Position---------------------+ //+------------------------------------------------------------------+ //| Buy/Sell Indicator | //+------------------------------------------------------------------+ int CalcBSI() { //---- calc current indicators //double val1=iCustom("GBPJPY",0,"NoLoss",0,0,0); //double val2=iCustom("GBPJPY",0,"NoLoss",0,1,0); //double val3=iCustom("USDJPY",0,"NoLoss",0,0,0); //double val4=iCustom("USDJPY",0,"NoLoss",0,1,0); double val1=iOpen("GBPJPY",0,0); double val2=iClose("GBPJPY",0,0); double val3=iOpen("USDJPY",0,0); double val4=iClose("USDJPY",0,0); double nval1=xDiv(val1,val2); double nval2=xDiv(val3,val4); if(nval1>nval2) { bsflag=2; bstarget=(nval1-nval2)*10000; } else if(nval1<nval2) { bsflag=1; bstarget=(nval2-nval1)*10000; } else { bsflag=0; bstarget=0; } if(bstarget<10) { bsflag=0; bstarget=0; } } //+-----------------------End Buy/Sell Indicator---------------------+ //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if (Period()<PERIOD_H1) { Alert("Only on H1 or larger!"); return(0); } // For use only on H4 --- NO ERROR if activated for(cnt=0;cnt<OrdersTotal();cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) // check for symbol and magic number { if(OrderType()==OP_BUY) // long position is opened { // check for trailing stop if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); return(0); } } } } else // go to short position { // check for trailing stop if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } //+--------------------End TrailingStop & BreakEven------------------+ if (UseHourTrade) { if (!((Hour() >= FromHourTrade) && (Hour() <= ToHourTrade))) { Comment("Non-Trading Hours!"); return(0); } } GetCurrentOrders(); CalcBSI(); Comment("\nStart Balance= ",StartBalance,",","Start Equity= ",StartEquity, "\nBalance: ",AccountBalance(),","," Equity: ",AccountEquity(),","," TotalProfit: ",AccountProfit(), "\nBSFlag: ",bsflag,"\nbstarget: ",bstarget); //---- exit trades if (openorders!=0) { if ((bsflag==1) && (dir<0)) CloseTrade(); if ((bsflag==2) && (dir>0)) CloseTrade(); } //---- open trades else { if (bsflag != 0 && bstarget>20) OpenTrade(); } } //+---------------------End Expert Start Function--------------------+ double xDiv(double a, double b) { if(b==0) return(b); else return(a/b); } Backtesting/Optimization Automatic Magic Function Required 退出策略。阶梯式止损与拖曳式止损 daet 2008.10.13 05:54 #462 请大家帮忙! 有没有办法在优化报告中使用 "空头赢利%"和 "多头赢利%"作为标准来过滤策略测试器 的报告。目前,你只能根据利润、总交易量、利润系数、预期回报率等进行过滤。 谢谢 amyfor 2008.10.22 23:07 #463 MT4与贸易站 大家好。 我想知道我是否能从这个论坛上比我聪明的人那里得到一些反馈/意见/想法。 当我在MT4上回测一个策略时,我得到的结果与我使用Trade Station回测时 不同....,编码是一样的......当观看实时交易时,它们在同一时间触发和退出等....,但回测的结果非常不同...我应该相信谁? 我听说TS的数据比MT4好,但想知道你们中的一些人怎么想...... 谢谢大家 Linuxser 2008.10.23 00:50 #464 amyfor: 问候大家。我想知道我是否可以从这个论坛上比我聪明的人那里得到一些反馈/意见/想法。 当我在MT4上回测一个策略时,我得到的结果与我使用Trade Station回测时不同....,编码是一样的......当观看实时交易时,它们在同一时间触发和退出等....,但回测的结果却非常不同...我应该相信谁? 我听说TS的数据比MT4好,但想知道你们中的一些人怎么想...... 谢谢大家 他们是完全不同的程序,差异会有的。 amyfor 2008.10.23 01:08 #465 Linuxser: 它们是完全不同的程序,差异将是。 嗨,Linuxser....,再次感谢你的回答,并感谢你把这个问题转移到适当的主题。 当然,我预计会有一些差异,因为它们是不同的程序......我想我想知道的是,我是否应该相信其中一个的回测结果 而不是另一个......实盘交易95%的时间都是一致的......作为一个例子,如果你(或这里的任何其他成员)被告知有两套交易同一策略的结果,你会怎么做? 再次感谢你为使这个地方如此有帮助而付出的所有努力和时间。 Linuxser 2008.10.23 01:21 #466 amyfor: 例如......如果你(或这里的任何其他成员)接触到两套相同策略的交易结果,你会怎么做......驳回这两套结果......相信结果最好的那套......再次感谢你为使这个地方如此有帮助而付出的所有努力和时间。 我总是这样做。纸+笔+EXCEL+图表上的系统+我自己的判断。 [删除] 2008.10.23 10:40 #467 如何优化? 优化EA的最佳方法是什么?我发现一个非常好的EA,需要进行优化,但我不知道如何做。 有人为Alpari做了,我需要为IBFX做?有谁能帮忙吗? 提前感谢任何帮助。 Mr Chips amyfor 2008.10.23 12:58 #468 Linuxser: 我一直都是这样做的。纸+笔+EXCEL+图表上的系统+我自己的判断。 回答得好......再次感谢。 blogzr3 2008.10.24 17:29 #469 有可能得到不同的测试结果 吗? 我在使用相同的日期范围在相同的符号上测试同一EA时,得到了不同的结果。 多次点击开始会得到不同的结果。我的初步反应是EA中存在一些随机功能,但我在代码中看不到这样的东西。看一下每个订单行的详细报告,这些行在价格、盈亏和T/P方面都有一两分的差距。 我错过了什么?这是MT4,构建218。 RealFx 2008.10.25 14:35 #470 ??? ------------------------------------ 1...404142434445464748495051525354...95 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
#property link ""
//---- input parameters
extern bool AccountIsIBFXmini=false;
extern double Lots=0.1;
extern double MaximumRisk=0.03;
extern double DecreaseFactor=300;
extern double MinLot=0.01;
extern int Slippage=3;
extern double TrailingStop=30;
double StartBalance,StartEquity;
extern bool UseHourTrade = false;
extern int FromHourTrade = 6;
extern int ToHourTrade = 18;
//---- global variables
int dir=0;
int openorders=0;
int cnt;
string pair;
int MagicNumber;
int bsflag=0;
int bstarget=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if (Symbol() == "AUDCADm" || Symbol() == "AUDCAD") { MagicNumber = 427101; }
if (Symbol() == "AUDJPYm" || Symbol() == "AUDJPY") { MagicNumber = 427102; }
if (Symbol() == "AUDNZDm" || Symbol() == "AUDNZD") { MagicNumber = 427103; }
if (Symbol() == "AUDUSDm" || Symbol() == "AUDUSD") { MagicNumber = 427104; }
if (Symbol() == "CHFJPYm" || Symbol() == "CHFJPY") { MagicNumber = 427105; }
if (Symbol() == "EURAUDm" || Symbol() == "EURAUD") { MagicNumber = 427106; }
if (Symbol() == "EURCADm" || Symbol() == "EURCAD") { MagicNumber = 427107; }
if (Symbol() == "EURCHFm" || Symbol() == "EURCHF") { MagicNumber = 427108; }
if (Symbol() == "EURGBPm" || Symbol() == "EURGBP") { MagicNumber = 427109; }
if (Symbol() == "EURJPYm" || Symbol() == "EURJPY") { MagicNumber = 427110; }
if (Symbol() == "EURUSDm" || Symbol() == "EURUSD") { MagicNumber = 427111; }
if (Symbol() == "GBPCHFm" || Symbol() == "GBPCHF") { MagicNumber = 427112; }
if (Symbol() == "GBPJPYm" || Symbol() == "GBPJPY") { MagicNumber = 427113; }
if (Symbol() == "GBPUSDm" || Symbol() == "GBPUSD") { MagicNumber = 427114; }
if (Symbol() == "NZDJPYm" || Symbol() == "NZDJPY") { MagicNumber = 427115; }
if (Symbol() == "NZDUSDm" || Symbol() == "NZDUSD") { MagicNumber = 427116; }
if (Symbol() == "USDCHFm" || Symbol() == "USDCHF") { MagicNumber = 427117; }
if (Symbol() == "USDJPYm" || Symbol() == "USDJPY") { MagicNumber = 427118; }
if (Symbol() == "USDCADm" || Symbol() == "USDCAD") { MagicNumber = 427119; }
if (MagicNumber == 0) { MagicNumber = 427199; }
pair = Symbol();
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int GetCurrentOrders()
{
//---- calc open OrderSelect
openorders=0;
dir=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
openorders+=1;
if(OrderType()==OP_BUY) dir=1;
if(OrderType()==OP_SELL) dir=-1;
}
}
}
//+-------------------End Calculate open positions-------------------+
//+------------------------------------------------------------------+
//| Calculate optimal lot size |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots;
int orders=HistoryTotal(); // history orders total
int losses=0; // number of losses orders without a break
//---- select lot size
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/500.0,1);
//---- calculate number of losses orders without a break
if(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber || OrderType()>OP_SELL) continue;
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//---- return lot size
if(lot>999) lot=999;
if(lot<MinLot) lot=MinLot;
return(lot);
}
//+-------------------End Calculate optimal lot size-----------------+
//+------------------------------------------------------------------+
//| Close Open Position |
//+------------------------------------------------------------------+
int CloseTrade()
{
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3,Yellow);
if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow);
}
}
}
//+----------------------End Close Open Position---------------------+
//+------------------------------------------------------------------+
//| Open Trade Position |
//+------------------------------------------------------------------+
int OpenTrade()
{
int vLots=LotsOptimized();
if (bsflag==1) OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,Slippage,0,Ask+bstarget*Point,"NoLoss",MagicNumber,0,Green);
if (bsflag==2) OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,Slippage,0,Ask-bstarget*Point,"NoLoss",MagicNumber,0,Red);
}
//+----------------------End Open Trade Position---------------------+
//+------------------------------------------------------------------+
//| Buy/Sell Indicator |
//+------------------------------------------------------------------+
int CalcBSI()
{
//---- calc current indicators
//double val1=iCustom("GBPJPY",0,"NoLoss",0,0,0);
//double val2=iCustom("GBPJPY",0,"NoLoss",0,1,0);
//double val3=iCustom("USDJPY",0,"NoLoss",0,0,0);
//double val4=iCustom("USDJPY",0,"NoLoss",0,1,0);
double val1=iOpen("GBPJPY",0,0);
double val2=iClose("GBPJPY",0,0);
double val3=iOpen("USDJPY",0,0);
double val4=iClose("USDJPY",0,0);
double nval1=xDiv(val1,val2);
double nval2=xDiv(val3,val4);
if(nval1>nval2)
{
bsflag=2;
bstarget=(nval1-nval2)*10000;
} else
if(nval1<nval2)
{
bsflag=1;
bstarget=(nval2-nval1)*10000;
}
else
{
bsflag=0;
bstarget=0;
}
if(bstarget<10)
{
bsflag=0;
bstarget=0;
}
}
//+-----------------------End Buy/Sell Indicator---------------------+
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (Period()<PERIOD_H1) { Alert("Only on H1 or larger!"); return(0); } // For use only on H4 --- NO ERROR if activated
for(cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) // check for symbol and magic number
{
if(OrderType()==OP_BUY) // long position is opened
{
// check for trailing stop
if(TrailingStop>0){
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else // go to short position
{
// check for trailing stop
if(TrailingStop>0){
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
//+--------------------End TrailingStop & BreakEven------------------+
if (UseHourTrade)
{
if (!((Hour() >= FromHourTrade) && (Hour() <= ToHourTrade)))
{
Comment("Non-Trading Hours!");
return(0);
}
}
GetCurrentOrders();
CalcBSI();
Comment("\nStart Balance= ",StartBalance,",","Start Equity= ",StartEquity,
"\nBalance: ",AccountBalance(),","," Equity: ",AccountEquity(),","," TotalProfit: ",AccountProfit(),
"\nBSFlag: ",bsflag,"\nbstarget: ",bstarget);
//---- exit trades
if (openorders!=0) {
if ((bsflag==1) && (dir<0)) CloseTrade();
if ((bsflag==2) && (dir>0)) CloseTrade();
}
//---- open trades
else
{
if (bsflag != 0 && bstarget>20) OpenTrade();
}
}
//+---------------------End Expert Start Function--------------------+
double xDiv(double a, double b)
{
if(b==0) return(b); else return(a/b);
}请大家帮忙!
有没有办法在优化报告中使用 "空头赢利%"和 "多头赢利%"作为标准来过滤策略测试器 的报告。目前,你只能根据利润、总交易量、利润系数、预期回报率等进行过滤。
谢谢
MT4与贸易站
大家好。
我想知道我是否能从这个论坛上比我聪明的人那里得到一些反馈/意见/想法。
当我在MT4上回测一个策略时,我得到的结果与我使用Trade Station回测时 不同....,编码是一样的......当观看实时交易时,它们在同一时间触发和退出等....,但回测的结果非常不同...我应该相信谁?
我听说TS的数据比MT4好,但想知道你们中的一些人怎么想......
谢谢大家
问候大家。
我想知道我是否可以从这个论坛上比我聪明的人那里得到一些反馈/意见/想法。
当我在MT4上回测一个策略时,我得到的结果与我使用Trade Station回测时不同....,编码是一样的......当观看实时交易时,它们在同一时间触发和退出等....,但回测的结果却非常不同...我应该相信谁?
我听说TS的数据比MT4好,但想知道你们中的一些人怎么想......
谢谢大家他们是完全不同的程序,差异会有的。
它们是完全不同的程序,差异将是。
嗨,Linuxser....,再次感谢你的回答,并感谢你把这个问题转移到适当的主题。
当然,我预计会有一些差异,因为它们是不同的程序......我想我想知道的是,我是否应该相信其中一个的回测结果 而不是另一个......实盘交易95%的时间都是一致的......作为一个例子,如果你(或这里的任何其他成员)被告知有两套交易同一策略的结果,你会怎么做?
再次感谢你为使这个地方如此有帮助而付出的所有努力和时间。
例如......如果你(或这里的任何其他成员)接触到两套相同策略的交易结果,你会怎么做......驳回这两套结果......相信结果最好的那套......再次感谢你为使这个地方如此有帮助而付出的所有努力和时间。
我总是这样做。纸+笔+EXCEL+图表上的系统+我自己的判断。
如何优化?
优化EA的最佳方法是什么?我发现一个非常好的EA,需要进行优化,但我不知道如何做。
有人为Alpari做了,我需要为IBFX做?有谁能帮忙吗?
提前感谢任何帮助。
Mr Chips
我一直都是这样做的。纸+笔+EXCEL+图表上的系统+我自己的判断。
回答得好......再次感谢。
有可能得到不同的测试结果 吗?
我在使用相同的日期范围在相同的符号上测试同一EA时,得到了不同的结果。
多次点击开始会得到不同的结果。我的初步反应是EA中存在一些随机功能,但我在代码中看不到这样的东西。看一下每个订单行的详细报告,这些行在价格、盈亏和T/P方面都有一两分的差距。
我错过了什么?这是MT4,构建218。
???
------------------------------------