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!"); } }
哦,伙计,你真的是个明星。 我喜欢交易,但如果没有你的帮助,这是不可能的。 再次感谢
你好。
谁能帮助我解决我的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]
蒂埃里
你可以用这个函数来找出最后一个平仓的订单是盈利还是亏损的。
[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中使用该指标的线条,因为似乎没有为这些线条设置任何缓冲区?
谢谢
嗨,Mladen!又是我...
如何在使用iCustom的EA中使用该指标的线条,因为似乎没有为这些线条设置任何缓冲区?
谢谢这些是对象
您可以通过名称访问对象(您必须知道对象的确切名称,但指标必须在图表上处于活动状态,而且这些对象必须在图表上绘制)。
你可以通过名称访问对象(你必须知道对象的确切名称,但指标必须在图表上处于活动状态,这些对象必须在图表上绘制)。
很好。那么,我如何从EA中调用该指标?是用iCustom以外的东西,还是我弄错了......谢谢mladen
很好。那么,我如何从EA中调用该指标?用iCustom以外的东西,还是我弄错了......谢谢mladen
该指标只是在每个100点段的0、20、50、80点处画出水平。最简单的方法是检查这些水平是否被你的EA越过。
如果你尝试使用对象名称(和它们的价格,你将无法知道这些线的确切名称,因为它们取决于最高价和最低价 - 它们是一个变化的主题。使用上述的模式
该指标只是在每个100点段的0、20、50、80点处画出水平。最简单的方法是在你的EA中检查这些水平是否被越过。如果你尝试使用对象名称(和它们的价格,你将无法知道这些线的确切名称,因为它们取决于最高价和最低价 - 它们是一个变化的主题。使用上述的模式
你能不能举个例子说明如何做到这一点... 我很抱歉问了这么多,我只是刚开始学习编码,还没有掌握如何在买入或卖出的条件下检查 这些水平是否被越过。
你能不能举个例子说明如何做到这一点... 我很抱歉问了这么多,我只是刚开始学习编码,还没有掌握如何在买入或卖出的条件下检查这些水平是否被越过。
杰森2005
你有一个代码,在你所附的指标中,它是如何做到的?
Jason2005 你有一个代码,在你所附的指标中是如何做到的
那么会是这样吗?
蒂埃里
你可以用这个函数来找出最后一笔平仓的订单是盈利还是亏损。
{
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);
}
嗨,Mladen。
谢谢你的回答。
不需要lastorderprofit函数,因为我的lastTradeTicket()函数可以做同样的工作。
能否请您看一下我的EA?
我不要求你编辑代码,但如果你能告诉我我的代码有什么问题,我会非常感激。
谢谢你。
蒂埃里
53_martingale.mq4