if (hour1 == TimeHour(TimeCurrent()) && minute1 == TimeMinute(TimeCurrent()))// если время подошло то
{
min=Low[iLowest(Symbol(),0,MODE_LOW,6,1)]; // вычисляем минимальную цену последних 6 свечей
max=High[iHighest(Symbol(),0,MODE_HIGH,6,1)]; // вычисляем максимальную цену последних 6 свечейdouble volum=max-min;// общий объем локалки последних 6 свечей М5if ((volum<=n)==true)// если объем свечей меньше или равно n пунктов
{
OrderSend ( Symbol (), OP_BUYSTOP, параметры);// открываем отложенный ордер байстопOrderSend ( Symbol (), OP_SELLSTOP, параметры);// открываем отложенный ордер селлстоп
}
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY)&& OrderTakeProfit()==true) ///если первый открывшийся отложенный ордер закрыт с профитом
{
OrderDelete(1);// удаляем второй открытый отложенный ордер
}
}
bool closeorder;//определим закрытие ордеров
closeorder=true;
if (closeorder==true)//
{
int hour2 = TimeHour(StrToTime(time2));// вычисляем время закрытия ордеровint minute2 = TimeMinute(StrToTime(time2));
if (hour2 == TimeHour(TimeCurrent()) && minute2 == TimeMinute(TimeCurrent()))// если время
{
for(int i=OrdersTotal()-1; i>=0; i--)// определяем количество открытых позиций, и отложенных ордеров и закрываем все возможные позиции, и отложенные ордераif (OrderSelect(1,SELECT_BY_POS,MODE_TRADES))break; //определяем место где будем искать ( рабочие позиции)if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage);// Закрытие ордера бай если такой естьif (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage);//Закрытие ордера селл если такой есть
{
for(int D=OrdersTotal()-1; D>=0; D--)
if (OrderSelect(D,SELECT_BY_TICKET,MODE_TRADES)==true)
if (OrderType()==OP_BUYSTOP ) OrderDelete(D); //удаляем отложенный байстопif (OrderType()==OP_SELLSTOP) OrderDelete(D);// удаляем отложенный селлстоп
for (int li_ord=OrdersTotal()-1; li_ord>=0; li_ord--)
{
if (!OrderSelect(li_ord,SELECT_BY_POS)) continue;
if (OrderMagicNumber() != i_magic) continue;
if (OrderSymbol() != Symbol()) continue;
g_ticket = OrderTicket();
g_type = OrderType();
// Закрытие всех ордеров, если последний ордер закрытif (GetLastOrderState() != 0)
{
if (g_type > 1)
{
DeletePendingOrders(g_ticket);
}
else
{
CloseMarketOrders(g_ticket);
}
}
}
状况。
if (GetLastOrderState() != 0)
我们检查最后一个未平仓的订单是否已经平仓!然后我们开始删除挂单并关闭市场订单...
这里是函数本身,所以毫无疑问,它有问题(欢迎批评和评论,甚至更欢迎:)):
//+-------------------------------------------------------------------------------------+//| Получаем состояние последней позиции (Открыта или закрыта) |//+-------------------------------------------------------------------------------------+double GetLastOrderState()
{
double lastOrderCloseTime = -1, // Время закрытия последнего ордера
lastOrderOpenTime = -1; // Время открытия последнего ордераfor (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS)) continue;
if (OrderMagicNumber() != i_magic) continue;
if (OrderSymbol() != Symbol()) continue;
if (lastOrderOpenTime < OrderOpenTime())
{
lastOrderOpenTime = OrderOpenTime();
lastOrderCloseTime = OrderCloseTime();
}
}
return (lastOrderCloseTime);
}
你确定你有所有的矫正器。它们在一些地方缺失。这就是为什么你的逻辑是有缺陷的。而最有可能的是,结果并不是你所期望的那样。
维提亚,你离开了吗?我已经很久没有见过你了......
我今天回家了(几乎是)。
今天已经回家了(几乎是)。
你确定你有所有的矫正器。它们在一些地方缺失。这就是为什么你的逻辑是有缺陷的。而最有可能的是,结果并不是你所期望的那样。
如果你指的是指标的代码,那里一切正常,指标工作,以箭头的形式给出信号(对于买入/卖出-4和5指标缓冲区)。但当我从专家顾问的指标中 读到这些箭头时,我得到的是无稽之谈。我没有完全提起专家顾问,因为那里的主要内容是了解如何读取信号并进行相应的操作。一般来说,问题出在读取信号上。
要在这里正确粘贴代码,首先点击SRC,然后在那里复制代码。
如果我没有理解错的话,在某一时刻,我们必须打开一个 OP_BUYSTOP和一个 OP_SELLSTOP?此刻有任何其他挂单,是否可以接受?例如,有待处理的订单,但在开立新的订单之前,旧的订单应该被删除?
我已经粘贴了通用代码以使其更加清晰......在一天结束时,我想关闭所有可能的头寸和订单......
,在打开 两个挂单的时候(早上),在此之前没有未结订单或未结头寸,因为它们都必须在晚上的某个时间关闭。我想知道我的全部订单关闭至少是正确的描述? =))))
老实说,我不知道你的函数的逻辑。它是应该删除对象还是建立对象,我不知道。告诉我你想让它做什么,我们来看看哪里的逻辑是错的。然而,如果该函数试图建立一个图形对象但失败了,这意味着它已经存在。你的项目的下一个逻辑步骤是什么?你可以用不同的名字建立一个新的对象(例如,将当前时间添加到对象名称中(TimeToStr(TimeCurrent()))))或者,如果你已经有一个对象,但需要改变它的属性,不要再建立它,只需改变它的属性。然后错误就不会再发生了。
这很简单。最主要的是要知道你想要什么...:)
实际上,这个功能只是视觉上替代了打印,它只是在屏幕上显示所有的东西。它还没有写得很好,但它是有效的。:)我到了那里就会重写。然后你可以思考一下刚才的问题。
顺便说一下,如果你不建立新的对象,而是修改现有对象的属性,那么同样...这将是一个令人头痛的问题。我们的想法是在屏幕上显示最后的N个滩涂。如果我们总是覆盖最外层的对象,我们最终可能只有一个具有特定错误的对象。我可以更进一步,在一个循环中选择我需要的许多对象,然后只重写它们,但可能不值得这样做,因为这个函数只是用来测试的,而且我并不真的厌烦它,因为我已经有太多的事情要做。有一天,我将尝试该函数的代码,并将其带入我的意识中,然后我就可以考虑它了!
出现了一个问题。我正在写下面的实验。我有一堆订单,自然是根据某些信号一个接一个地打开。如果最后一个订单被关闭,所有其他市场订单 和挂单 都应该被关闭,在所有...
当然,一切都可以通过数组来写,但我用的是普通方式。在这里,我们走了。
状况。
我们检查最后一个未平仓的订单是否已经平仓!然后我们开始删除挂单并关闭市场订单...
这里是函数本身,所以毫无疑问,它有问题(欢迎批评和评论,甚至更欢迎:)):
如果你说的是指标代码--那里的括号一切正常,指标工作,以箭头的形式给出信号(对于买/卖--4和5个指标缓冲区)。但当我从专家顾问的指标中读到这些箭头时,我得到的是无稽之谈。我没有完全提起专家顾问,因为那里的主要内容是了解如何读取信号并进行相应的操作。一般来说,问题出在读取信号上。
类似这样的事情。
实际上,该功能只是视觉上的替代打印,但它在屏幕上显示所有内容。它还没有写得很好,但它的作用...:)我到了那里就会重写。然后你可以思考一下刚才的问题。
顺便说一下,如果我们不建立新的对象,而是改变现有对象的属性,那么同样...这将是一个令人头痛的问题。根据想法,我们需要在屏幕上显示最后的N个关节。如果我们总是覆盖最后一个对象,我们最终可能只有一个对象有特定的错误。我可以更进一步,在一个循环中选择我需要的许多对象,然后只重写它们,但可能不值得这样做,因为这个函数只是用来测试的,而且我并不真的厌烦它,因为我已经有太多的事情要做了。有一天,我将尝试该函数的代码,并将其带入我的意识中,然后我就可以考虑它了!
这是你的:它应该是这样的。
类似这样的情况。
谢谢你的纠正,但算法没有正确工作......