编码帮助 - 页 483

 

哦,伙计,你真的是个明星。 我喜欢交易,但如果没有你的帮助,这是不可能的。 再次感谢

 
xtractalpha:
你好。

谁能帮助我解决我的LotsizeCalc()函数。

如果我的最后一笔交易是失败的,我想把我的手数乘以'MartingaleAmount'。如果我的最后一笔交易是赢家,我想使用 "正常 "手数。不幸的是,当我回测EA时,我从日志中得到了错误4051。

这与手数有关,因为当我试图在没有 "LotsizeCalc() "函数的情况下运行该EA时,该EA仍然有效。

有谁知道为什么我的lotsize函数不能工作?

谢谢。

蒂埃里

extern int MaximumTrades = 10; extern double StopLoss=25; extern double TakeProfit=50; extern double MartingaleAmount = 1.5; input double LotSize=0.1; int magic; double pips; int tradeNumber; string ScreenComment; double martinlot; double martinsize;

[/PHP]

double LotsizeCalc() { if(OrderSelect(lastTradeTicket(),MODE_HISTORY)) if(OrderProfit()<0 && tradeNumber 0){ if(OrderSelect(ticket,SELECT_BY_TICKET)){ sl = OrderOpenPrice()+(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()-(TakeProfit*pips); if(OrderType()==OP_BUY){ sl = OrderOpenPrice()-(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()+(TakeProfit*pips); } if(!OrderModify(ticket,price,sl,tp,0,Magenta)) { err = GetLastError(); Print("Encountered an error during modification!"+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to select the order for some reason Print("Failed to Select Order ",ticket); err = GetLastError(); Print("Encountered an error while seleting order "+(string)ticket+" error number "+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to place the order and send us back a ticket number. err = GetLastError(); Print("Encountered an error during order placement!"+(string)err+" "+ErrorDescription(err) ); if(err==ERR_TRADE_NOT_ALLOWED)MessageBox("You can not place a trade because \"Allow Live Trading\" is not checked in your options. Please check the \"Allow Live Trading\" Box!","Check Your Settings!"); } }

蒂埃里

你可以用这个函数来找出最后一个平仓的订单是盈利还是亏损的。

[PHP] double lastOrderProfit(int magicNumber=0)

{

datetime lastTime = 0;

double lastProfit = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

如果(OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;

如果(magicNumber!=0)

if (OrderMagicNumber() !=magicNumber) 继续。

如果(OrderSymbol() != Symbol()) 继续。

如果(OrderCloseTime() <= lastTime) 继续。

lastTime = OrderCloseTime();

lastProfit = OrderProfit()+OrderSwap()+OrderCommission()。

}

return(lastProfit);

}

只需检查lastOrderProfit()函数 的结果,如果它<0,则应用你的马汀格尔规则

 

嗨,Mladen!又是我...

如何在使用iCustom的EA中使用该指标的线条,因为似乎没有为这些线条设置任何缓冲区?

谢谢

附加的文件:
 
Jason2005:
嗨,Mladen!又是我...

如何在使用iCustom的EA中使用该指标的线条,因为似乎没有为这些线条设置任何缓冲区?

谢谢

这些是对象

您可以通过名称访问对象(您必须知道对象的确切名称,但指标必须在图表上处于活动状态,而且这些对象必须在图表上绘制)。

 
mladen:
你可以通过名称访问对象(你必须知道对象的确切名称,但指标必须在图表上处于活动状态,这些对象必须在图表上绘制)。

很好。那么,我如何从EA中调用该指标?是用iCustom以外的东西,还是我弄错了......谢谢mladen

 
Jason2005:
很好。那么,我如何从EA中调用该指标?用iCustom以外的东西,还是我弄错了......谢谢mladen

该指标只是在每个100点段的0、20、50、80点处画出水平。最简单的方法是检查这些水平是否被你的EA越过。

如果你尝试使用对象名称(和它们的价格,你将无法知道这些线的确切名称,因为它们取决于最高价和最低价 - 它们是一个变化的主题。使用上述的模式

 
mladen:
该指标只是在每个100点段的0、20、50、80点处画出水平。最简单的方法是在你的EA中检查这些水平是否被越过。如果你尝试使用对象名称(和它们的价格,你将无法知道这些线的确切名称,因为它们取决于最高价和最低价 - 它们是一个变化的主题。使用上述的模式

你能不能举个例子说明如何做到这一点... 我很抱歉问了这么多,我只是刚开始学习编码,还没有掌握如何在买入或卖出的条件下检查 这些水平是否被越过。

 
Jason2005:
你能不能举个例子说明如何做到这一点... 我很抱歉问了这么多,我只是刚开始学习编码,还没有掌握如何在买入或卖出的条件下检查这些水平是否被越过。

杰森2005

你有一个代码,在你所附的指标中,它是如何做到的?

 
mladen:
Jason2005 你有一个代码,在你所附的指标中是如何做到的

那么会是这样吗?

MathMod(i, 5) == 0.0
 
mladen:
蒂埃里

你可以用这个函数来找出最后一笔平仓的订单是盈利还是亏损。

double lastOrderProfit(int magicNumber=0)

{

datetime lastTime = 0;

double lastProfit = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;

if (magicNumber!=0)

if (OrderMagicNumber() != magicNumber) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderCloseTime() <= lastTime) continue;

lastTime = OrderCloseTime();

lastProfit = OrderProfit()+OrderSwap()+OrderCommission();

}

return(lastProfit);

}

只需检查lastOrderProfit()函数的结果,如果它<0,则应用你的马丁格尔规则


嗨,Mladen。

谢谢你的回答。

不需要lastorderprofit函数,因为我的lastTradeTicket()函数可以做同样的工作。

能否请您看一下我的EA?

我不要求你编辑代码,但如果你能告诉我我的代码有什么问题,我会非常感激。

谢谢你。

蒂埃里

53_martingale.mq4

附加的文件: