while (ordersToDelete > 0) // Если есть ордера, которые требуется удалить..
{
OrderDelete(s_ticket,Black);
ordersToDelete--; // Уменьшаем количество требуемых ордеров для удаления на 1, т.к. строкой выше..// .. один отложенник уже удалили
}
//+-------------------------------------------------------------------------------------+//| Удаление несработанных отложеннык шортов |//+-------------------------------------------------------------------------------------+void DeletePendingSells(int& amountOfCurrPending)
{
int total = OrdersTotal() - 1,
ordersToDelete = level - amountOfCurrPending, // Количество отложек, которые требуется удалить
s_ticket = -1, // Тикет искомого ордера
np = -1; // Номер позиции искомого ордера
amountOfCurrPendingBuys = 0; // Количество текущих отложек на покупку
amountOfCurrPendingSells = 0; // Количество текущих отложек на продажуdouble OOP = 20.0; // Зададим значение цены открытия отложки, которой не может быть..if (ordersToDelete == 0) return (0); // Если ничего удалять не нужно, выйдем из функцииfor (int i=total; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != i_magic) continue;
if(OrderType() != OP_SELLSTOP) continue; // Работает только с шортовыми ордерамиif (OOP > OrderOpenPrice())
{
OOP = OrderOpenPrice(); // Ищется ордер, с минимальной ценой открытия
np = i;
}
}
if (OrderSelect(np,SELECT_BY_POS))
{
s_ticket = OrderTicket(); // Получаем тикет ордера с минимальной ценой открытия
OrderDelete(s_ticket,Black);
}
return (0);
}
你好,这里有一个问题。我怎样才能在代码中写到只对固定的分形进行操作?
如果分形是固定的,它是....
我的分形
嗯,是的,如果每个方向的挂单数量相同,这样找到合适的挂单没有问题。如果不一样,那么按照我的理解,这将是行不通的。
然后确定触发挂单的事实,并删除最远的相反订单。
所有这些都是在某一 时刻只为一个 事实和一个 挂单做的。没有必要像你试图做的那样,创建一个被触发和被删除的数量。你会在一个刻度上捕捉到挂单转化的事实。所有其他触发器(如果有的话)将由下一个tick决定。
berezhnuy,因为周末的差价要大几倍。
尊敬的程序员,这里是计算买入和卖出订单的代码,只开一个买入 或卖出订单。
int CountBuy()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
{
if(OrderType() == OP_BUY)
count++;
}
}
return(count)
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
{
if(OrderType() == OP_SELL)
count++;
}
}
return(count);
}
一切似乎都在工作,但在我的EA中,有条件使用TP和SL在一些烛台形态上买入和卖出。但是,当这个条件被满足,TP被触发,那么在0蜡烛的形成中,订单打开的条件仍然是真实的,新的订单被打开,这在当时是不应该的。你能告诉我们用哪段代码来禁止进一步开单吗?该EA本身附在后面。
然后确定被触发的挂单的事实,并删除最远的一个相反的挂单。
所有这些只为一个 事实和一个 时间而做。没有必要像你试图做的那样,创建一个被触发和被删除的数量。你会在一个刻度上捕捉到挂单转化的事实。所有其他触发器(如果有的话)将由下一个tick决定。
如果每次打钩的数量超过了这个数字呢?比方说,如果订单之间的步幅非常小,那么就可以触发多个订单。当然,我们将无法及时执行必要的行动。
如果有更多的人在打勾,怎么办?如果,比方说,订单之间的步幅非常小,那么就可以触发多个订单。当然,我们将无法及时执行所需的行动。
在同一循环中,对未结头寸进行循环,寻找当前条形上的触发订单,并删除头寸。
那么,这个循环将被重复,所有的东西都将被再次删除。我目前拥有的变体中也有一个条件。
也就是说,它应该删除,直到ordersToDelete 为零。但它破坏了一切。这似乎是最基本的,但有些愤怒的事情发生了。在毫无价值的教程中,根本没有关于这种时刻的内容。我试了两种方法,并以不同的方式重写了它,它没有发挥应有的作用。
重写的方式不同。
金,也在寻找同样的方式。找到一个有最低开盘价 的订单,定义了它的位置,并选择了这个订单,定义了它的票据并删除了它。但它没有被删除。