有助于精简EA - 页 2

 
delcor wrote>>

告诉我,在EA程序中是否有一个测试系统,可以一步步向你展示这个EA运行时发生的情况。

没有,没有测试的步骤;使用打印显示检查值和你程序的各个部分。

 

我喜欢你的 "手数优化 "代码;我对它进行了调整,以便在损失增加时增加手数。

 
ronaldosim:

我喜欢你的 "手数优化 "代码;我对它进行了调整,以便在损失增加时增加手数。

请告诉我

或者把你的EA发给我

 
delcor:

请给我看看

或者把你的EA发给我

它给了我一个错误

函数"CalculateCurrentOrders "没有被引用,将从exp-file中删除。
 
delcor wrote>>

它给了我一个错误

函数 "CalculateCurrentOrders "没有被引用,将从exp-file中删除。

忽略这个错误;它只是说你有一个叫做CalculateCurrentOrders的函数,但你并没有使用它;所以你要么删除它,要么退出;它不会造成任何伤害;系统说它会从你的编译文件中删除这个函数 ex4

 
delcor wrote>>

请给我看看

或者把你的EA发给我

在函数LotOptimization下,将你的代码改为如下内容

lot=lot*MulltiplyingFactor*losses

其中MulitplyFactor=2或3或4等,类似于你的DecreaseFactor,即随着亏损的增加而减少你的手数。

尽管如此,随着损失的增加,增加你的手数对你的EA来说是危险的,所以要小心使用。

 
ronaldosim:

在函数LotOptimization下,将你的代码改为如下内容

lot=lot*MulltiplyingFactor*losses

其中MulitplyFactor=2或3或4等,类似于你的DecreaseFactor,即在损失增加时减少你的手数。

尽管如此,随着损失的增加,增加你的手数对你的EA是很危险的,所以要小心使用。

你的意思是这样的吗?

//+------------------------------------------------------------------+
//|计算最佳手数 |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots*Multiplying*losses;
int orders=HistoryTotal(); // 历史订单总数
int losses=0; // 亏损订单的数量,没有休息时间
//---- 选择手数大小
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1)。
//---- 计算亏损订单的数量而不中断
如果(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("历史错误!"); break; }
如果(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 继续。
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
如果(损失>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//---- 返回手数大小
如果(lot<0.1) lot=0.1;
return(lot);
}
 
delcor wrote>>

你是说像这样的东西吗?

//+------------------------------------------------------------------+
//|计算最佳手数|
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots*Multiplying*losses;
int orders=HistoryTotal(); // 历史订单总数
int losses=0; // 亏损订单的数量,没有休息时间
//---- 选择手数大小
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1)。
//---- 计算亏损订单的数量而不中断
如果(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("历史错误!"); break; }
如果(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 继续。
//----
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
如果(损失>1) lot=NormalizeDouble(Lots*Multiplying*losses;,1);}
//---- 返回手数大小
if(lot<0.1) lot=0.1;
return(lot);
}

不,把它放在if(loss>1)的后面。

 
ronaldosim:

不,把它放在if(loss>1)的后面。

它给了我一个错误

'乘法' - 未定义变量 C:\Program Files\InterbankFX Trader 4\experts\jbtest4.mq4 (57, 44)

我在哪里定义它

 
delcor:

它给了我一个错误

'Multiplying' - 未定义变量 C:\Program Files\Interbank FX Trader 4\experts\jbtest4.mq4 (57, 44)

我在哪里定义它?



好吧,我有int multiplying=2。