bool TrailingStop()
{
int MD0=MarketInfo(Symbol(),MODE_STOPLEVEL);
if ((OrderMagicNumber()==11111)==true)
{
Print("Ведём позицию Buy");
while(OrderCloseTime()==0)
{
if ((NormalizeDouble(Bid-OrderStopLoss()+StepStop*Point,Digits)>NormalizeDouble(StopLevel*Point,Digits))&&(NormalizeDouble(MD0,Digits)<NormalizeDouble(StopLevel*Point,Digits)))
{
RefreshRates();
Print("текущий бид-",Bid,", текущий стоп-",OrderStopLoss(),", текуйщий тейк-",OrderTakeProfit(),", цена открытия-",OrderOpenPrice(),", расстояние от текущего стопа до текущего бида-",NormalizeDouble(Bid-OrderStopLoss(),Digits),", новый стоп-",NormalizeDouble(Bid-StopLevel*Point,Digits));
if (OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-StopLevel*Point,Digits),OrderTakeProfit(),0)==true)
Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
elsePrint("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
}
Sleep(1000);
}
if (OrderCloseTime()>0)
{
Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
return(true);
}
}
else
{
if ((OrderMagicNumber()==22222)==true)
{
Print("Ведём позицию Sell");
while(OrderCloseTime()==0)
{
if ((NormalizeDouble(OrderStopLoss()+StepStop*Point-Ask,Digits)>NormalizeDouble(StopLevel*Point,Digits))&&(NormalizeDouble(MD0,Digits)<NormalizeDouble(StopLevel*Point,Digits)))
{
RefreshRates();
Print("текущий бид-",Ask,", текущий стоп-",OrderStopLoss(),", текуйщий тейк-",OrderTakeProfit(),", цена открытия-",OrderOpenPrice(),", расстояние от текущего стопа до текущего бида-",NormalizeDouble(OrderStopLoss()-Ask,Digits),", новый стоп-",NormalizeDouble(Ask+StopLevel*Point,Digits));
if (OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+StopLevel*Point,Digits),OrderTakeProfit(),0)==true)
Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
elsePrint("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
}
Sleep(1000);
}
if (OrderCloseTime()>0)
{
Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
return(true);
}
}
elsereturn(false);
}
}
我试着添加它,它几乎成功了,但如果价格向一个方向移动,它就会按照我需要的方式开仓。
例如,他关闭了一个买入,然后开了一个新的买入和卖出,然后又关闭了一个买入,然后又开了一个买入和卖出,但如果他关闭了非买入和卖出,就不会开新的(((((。
请看一下它,看看是否有帮助...
我写的都是些什么废话))。但这就是它的工作原理,我有这些开放条件......
我需要另一个条件,如果价格发生变化,它将打开一个位置...
我说对了吗?NumberOfPositions(Symbol(),OP_BUY,Magic); 是多少个未平仓的买入头寸?
您的专家顾问不定义开仓条件。 它只是按照您指定的方向开仓(变量BUY和SELL)。你可以添加一个条件,检查这个EA或你的EA的最后一笔交易是否以盈利或亏损结束。但在我看来,它已经应付了它的任务--它最清楚地表明了这种战略的无利可图。实际上,我们甚至不需要专家顾问来做这件事,即使没有计算器,也可以在半小时内计算出历史数据。如果止损等于止盈,损失等于点差乘以交易 次数,在所有其他情况下,点差加上止损和止盈之间差额的一半。
P.S. 一般来说,虽然猫头鹰的代码不同,但它所做的正是你的EA将做的,如果你在其中加入你想要的条件。也就是说,如果价格发生了变化,向另一个方向发展,它将在每次收盘时打开两个相反的交易。只是对我来说,从代码中删除所有与手头任务无关的 "不必要 "的东西更容易。
P.P.S. 关于NumberOfPositions(Symbol(),OP_BUY,Magic)你说对 了。
哪个邮局可以对收到的邮件及其内容发短信?
例如:mail.ru
你的专家顾问没有开仓条件,它只是按照你设定的方向(买入和卖出的变量)开仓。你可以添加一个条件,检查这个EA或你的EA的最后一笔交易是否以盈利或亏损结束。但在我看来,它已经应付了它的任务--它最清楚地表明了这种战略的无利可图。实际上,我们甚至不需要专家顾问来做这件事,即使没有计算器,也可以在半小时内计算出历史数据。只要你在任何专家顾问中加入你的条件(开出两笔相反的交易,并仅通过止损或止盈来关闭),损失金额就会变得固定,只取决于交易的数量。
我不知道为什么开仓 数量取决于它。 我不能调整它(!
减少开仓数量的唯一方法是增加手数。 如果你将手数设置为最大,那么它将一次开1-3个仓位。
如果你将手数设置为最小,它将一次开出500-1500个头寸
出于某种原因,我在测试EA时一次开了500-800个头寸,我不明白为什么开仓数量取决于它,而我不能调整它(!
减少开仓数量的唯一方法是增加手数。 如果你将手数设置为最大,那么它将一次开1-3个仓位。
如果你将手数设置为最小,它将一次开出500-1500个头寸
1.每次只能开启有限数量的订单。
2.如果拍品大幅增加,由于缺乏资金,无法开设 额外的职位。
我的专家顾问,你在测试期间给我的,由于某些原因,我一次开了500-800个头寸,我不明白是什么决定了开仓的数量,我不能调整(
减少开仓数量的唯一方法是增加手数,如果你将手数设置为满,那么它将一次开1-3个仓位。
如果你将手数设置为最小,它将一次开出500-1500个头寸
我为我的EA写了一些类似尾随的东西,但它不起作用,取决于我试图改变它的工作,它在修改时产生错误1,或者只是没有进一步超过第一个打印(Print("Leading Buy position");)...什么原因,我很乐意听到任何建议,提前感谢
我为我的EA写了一些类似尾随的东西,但它不起作用,取决于我试图改变它的工作,它在修改时产生错误1,或者只是不超过第一个打印(Print("Leading Buy position");)...什么原因,我很乐意听到任何建议,提前感谢
你的条件while(OrderCloseTime()==0)。如果你进入这个循环,修改尝试将被重复进行,直到订单关闭或遇到操作者brek或return,而你在循环中没有遇到这种情况。
对不起,搞砸了。它们就在那里,但我没有在不戴眼镜的情况下一下子注意到它们。删除了多余的括号,增加了输出。 试试吧,可能会有效果。