Функция CloseAll() предназначена для закрытия сделок в определенное время, если они продолжаются так долго.
Эта часть кода является пересмотренной частью того, что я пытаюсь понять: (как вы можете видеть, MagicNumber и Symbol присутствуют, однако только отложенные ордера все еще модифицируются)
for(int iPos = OrdersTotal()-1; iPos >= 0 ; iPos--) if (
OrderSelect(iPos, SELECT_BY_POS) // Only my orders w/
&& OrderMagicNumber() == MagicNumber // my magic number
&& OrderSymbol() == "EURUSD"// and my pair.
){OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);
if (!OrderSelect(iPos, SELECT_BY_POS))
Alert("OrderSelect failed: ", GetLastError());}
Если вы не потрудитесь прочитать сообщения и исправить свой код, мы не потрудимся помочь вам.
Я сделал оба вышеупомянутых пункта, вы обращаетесь не к тому человеку, как мне кажется. Я оригинальный автор, а не deVries, и я изменил код на такой (как было опубликовано ранее):
for(int iPos = OrdersTotal()-1; iPos >= 0 ; iPos--) if (
OrderSelect(iPos, SELECT_BY_POS) // Only my orders w/
&& OrderMagicNumber() == MagicNumber // my magic number
&& OrderSymbol() == "EURUSD"// and my pair.
){OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);
if (!OrderSelect(iPos, SELECT_BY_POS))
Alert("OrderSelect failed: ", GetLastError());}
Проблема в том, что он изменяет отложенные ордера, в то время как я хочу, чтобы он изменял только открытые ордера и только тогда, когда два открытых ордера от одного и того же символа открыты и выполняются одновременно. Я пробовал различные комбинации чисел и номера OrderSelect, но все еще нахожусь в тупике.
Я сделал оба вышеупомянутых пункта, но вы обращаетесь не к тому человеку, как мне кажется. Я оригинальный плакат, а не deVries, и я изменил код на этот (как было опубликовано ранее):
Проблема в том, что он изменяет отложенные ордера, в то время как я хочу, чтобы он изменял только открытые ордера и только тогда, когда два открытых ордера от одного и того же символа открыты и выполняются одновременно. Я пробовал различные комбинации чисел и номера OrderSelect, но все еще в тупике.
Итак, вам нужно просмотреть все открытые ордера, проверить символ и MagicNumber, как указано выше... но вам также нужно проверить OrderType() <=OP_SELL... подсчитать ордера, которые совпадают, если их 2... то снова просмотреть цикл и OrderModify().
Единственный способ научиться - прочитать документацию по каждой функции и понять, как они работают. ... например, OrderType().
Я пробовал разные коды, но так и не смог добиться точной работы. Он изменяет одну из открытых сделок, когда две открыты, и продолжает изменять ее, а мне нужно, чтобы она была изменена только один раз, и мне нужно, чтобы были изменены обе сделки.
for(int iPos = OrdersTotal()-1; iPos >= 1 ; iPos--) if (
OrderSelect(iPos, SELECT_BY_POS) // Only my orders w/
&& OrderMagicNumber() == MagicNumber // my magic number
&& OrderSymbol() == "EURUSD"// and my pair.
&& (OrderType() <= OP_SELL)
){OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);
if (OrderSelect(iPos, SELECT_BY_POS))
if (OrderType() <= OP_BUY)
if (!OrderSelect(iPos, SELECT_BY_POS))
{OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit-20)*Point),0,Blue);}
if (!OrderSelect(iPos, SELECT_BY_POS))
Alert("OrderSelect failed: ", GetLastError());}
return(0);
}
for(int iPos = OrdersTotal()-1; iPos >= 1 ; iPos--) if (
OrderSelect(iPos, SELECT_BY_POS) // Only my orders w/
&& OrderMagicNumber() == MagicNumber // my magic number
&& OrderSymbol() == "EURUSD"// and my pair.
&& (OrderType() <= OP_SELL)
&& (OrderType() <=OP_BUY)
){OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);}
if (OrderSelect(iPos-1, SELECT_BY_POS))
{OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit-20)*Point),0,Blue);
return(0);
}}
Есть предложения, что мне делать? Я прочитал всю документацию.
Сначала устанавливаются два ордера, затем один из них (продажа в данном случае, когда я тестировал конкретную дату) исполняется. Позже в течение дня исполняется второй ордер (который все еще там), и эта сделка - покупка. Продажа - это ордер 1, а покупка - ордер 2. У покупки (ордер 2) TakeProfit изменяется на 16,3 пункта (я не уверен, почему он не добавляет 20 пунктов), затем TakeProfit увеличивается на 0,2 пункта в ту же минуту, и это продолжается, TakeProfit постоянно изменяется в течение дня, иногда увеличивается, иногда уменьшается, не уверен, почему это происходит.
Edit: Я думаю, что 16,3 пункта и дальнейшие изменения также зависят от спреда?
Хорошо, мы можем вернуться к началу.... Я знаю, что вы пытаетесь изменить два ордера ... но что именно вы пытаетесь сделать ? хвост SL ? что-то еще ? чего вы пытаетесь достичь ?
Извините, kwng, ваше сообщение не похоже на решение для madmax3.
Вам не нужно модифицировать сделки в функции( ) под названием void CloseAll()
Также вы должны выбрать там OrderSymbol ( ) и OrderMagicNumber ( )
и в этой части программы
отложенные сделки все равно будут модифицироваться.
Вот измененный код всего советника:
Функция CloseAll() предназначена для закрытия сделок в определенное время, если они продолжаются так долго.
Эта часть кода является пересмотренной частью того, что я пытаюсь понять:
(как вы можете видеть, MagicNumber и Symbol присутствуют, однако только отложенные ордера все еще модифицируются)
Вчера вам сказали, что select не будет работать. И что вы должны проверить коды возврата и прочее.
Если вы не собираетесь потрудиться прочитать сообщения и исправить свой код, мы не собираемся потрудиться попытаться помочь вам.
Вчера вам сказали, что селект не будет работать. И что вы должны протестировать коды возврата и около того.
Если вы не потрудитесь прочитать сообщения и исправить свой код, мы не потрудимся помочь вам.
Я сделал оба вышеупомянутых пункта, вы обращаетесь не к тому человеку, как мне кажется. Я оригинальный автор, а не deVries, и я изменил код на такой (как было опубликовано ранее):
Проблема в том, что он изменяет отложенные ордера, в то время как я хочу, чтобы он изменял только открытые ордера и только тогда, когда два открытых ордера от одного и того же символа открыты и выполняются одновременно. Я пробовал различные комбинации чисел и номера OrderSelect, но все еще нахожусь в тупике.
Я сделал оба вышеупомянутых пункта, но вы обращаетесь не к тому человеку, как мне кажется. Я оригинальный плакат, а не deVries, и я изменил код на этот (как было опубликовано ранее):
Проблема в том, что он изменяет отложенные ордера, в то время как я хочу, чтобы он изменял только открытые ордера и только тогда, когда два открытых ордера от одного и того же символа открыты и выполняются одновременно. Я пробовал различные комбинации чисел и номера OrderSelect, но все еще в тупике.
Итак, вам нужно просмотреть все открытые ордера, проверить символ и MagicNumber, как указано выше... но вам также нужно проверить OrderType() <=OP_SELL... подсчитать ордера, которые совпадают, если их 2... то снова просмотреть цикл и OrderModify().
Единственный способ научиться - прочитать документацию по каждой функции и понять, как они работают. ... например, OrderType().
Я пробовал разные коды, но так и не смог добиться точной работы. Он изменяет одну из открытых сделок, когда две открыты, и продолжает изменять ее, а мне нужно, чтобы она была изменена только один раз, и мне нужно, чтобы были изменены обе сделки.
Есть предложения, что мне делать? Я прочитал всю документацию.
Сначала устанавливаются два ордера, затем один из них (продажа в данном случае, когда я тестировал конкретную дату) исполняется. Позже в течение дня исполняется второй ордер (который все еще там), и эта сделка - покупка.
Продажа - это ордер 1, а покупка - ордер 2. У покупки (ордер 2) TakeProfit изменяется на 16,3 пункта (я не уверен, почему он не добавляет 20 пунктов), затем TakeProfit увеличивается на 0,2 пункта в ту же минуту, и это продолжается, TakeProfit постоянно изменяется в течение дня, иногда увеличивается, иногда уменьшается, не уверен, почему это происходит.
Edit: Я думаю, что 16,3 пункта и дальнейшие изменения также зависят от спреда?
Вам вчера сказали, что селект не будет работать. И что нужно тестировать коды возврата и про тотал.
Если вы не потрудитесь прочитать посты и исправить свой код, мы не потрудимся попытаться вам помочь.
Я сделал оба вышеупомянутых пункта, вы обращаетесь не к тому человеку, как мне кажется.
Я имел в виду ваш непосредственно предыдущий пост.
Вот пересмотренный код для всего советника: