Помощь в кодировании - страница 237

 

Здравствуйте,

У меня есть несколько коротких вопросов по кодированию, мой MT4, кажется, перешел на MQL5.

Некоторые блоки кода удаления больше не работают:

Под ними я получаю сообщение об ошибке:

'(' Object Pointer expected.

//+----------------------------------------------------------------------------+//| Закрыть и удалить |

//+----------------------------------------------------------------------------+

if(sell)if(oppositeclose)close(OP_BUY);

if(buy)if(oppositeclose)close(OP_SELL);

if(hidetp || hidesl){hideclose(OP_BUY);hideclose(OP_SELL);}

if(usetimeout && onetime){closetime(OP_BUY);closetime(OP_SELL);}

if(onecancelother){if(totalsell>0){delete(OP_BUYSTOP);delete(OP_BUYLIMIT);}if(totalbuy>0){delete(OP_SELLSTOP);delete(OP_SELLIMIT);}}

Ниже я получаю сообщения об ошибках: 'delete' - ожидается имя и

'}' - выражения не разрешены в глобальной области видимости

void delete(int type){

if(OrdersTotal()>0){

for(i=OrdersTotal();i>=0;i--){

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(type!=6){

if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==type){

OrderDelete(OrderTicket());

}

}

if(type==6){

if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP

|| OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT){

OrderDelete(OrderTicket());

}

}

}

}

}

Не мог бы кто-нибудь помочь?

Заранее спасибо!

 

Привет, товарищи трейдеры/кодеры!

Я надеюсь, что кто-нибудь сможет мне помочь.

Искал и пробовал несколько советников вокруг, я все еще не нашел то, что я ищу.

Возможно, я ищу что-то, что трудно найти, или я не стараюсь изо всех сил :-)

Я также торгую по системе SR, рисуя свои линии и создавая временные каналы. Есть ли что-то, что может исполнять позиции, когда цена достигает линий? Дело в том, что она должна быть способна открывать позиции каждый раз, когда цена достигает линий. Красные линии для продажи, синие для покупки, желтые для SL и зеленые для TP. То есть никаких разовых сделок или OCO.

Заранее спасибо!!!

Файлы:
sr.png  34 kb
 
daytrade:
Привет коллеги трейдеры/кодеры!

Я надеюсь, что кто-нибудь сможет мне помочь.

Искал и пробовал несколько советников вокруг, я все еще не нашел то, что искал.

Возможно, я ищу что-то, что трудно найти, или я не стараюсь изо всех сил :-)

Я также торгую по системе SR, рисуя свои линии и создавая временные каналы. Есть ли что-то, что может исполнять позиции, когда цена достигает линий? Дело в том, что она должна быть способна открывать позиции каждый раз, когда цена достигает линий. Красные линии для продажи, синие для покупки, желтые для SL и зеленые для TP. То есть никаких разовых сделок или OCO.

Заранее спасибо!!!

Вы проверили советника из этой темы: https: //www.mql5.com/en/forum/176382?

 

Изменить стоп-лосс

Привет всем,

Кто-нибудь знает, почему мой ордер modify stop loss работает неправильно?

Стоп лосс очень быстро перемещается между DonchianLowM5 и OrderOpenPrice, когда DonchianLowM5 движется выше OrderOpenPrice.

Вот код (извините, не знаю, как правильно вставить).

//--- Движение стоп-лосса

if (OrdersTotal() > 0)

{

for (int i = 0; i < OrdersTotal(); i++)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUY)

{

if (OrderStopLoss() < OrderOpenPrice())

{

if (DonchianLowM5 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), Green);

}

}

if (OrderStopLoss() > OrderOpenPrice())

{

if (DonchianLowH4 <= OrderOpenPrice())

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);

}

}

if (OrderStopLoss() >= OrderOpenPrice())

{

if (DonchianLowH4 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), Green);

}

}

}

Некоторые моменты вызывают недоумение.

Цель кода состоит в том, чтобы:

1. Модифицировать стоп-лосс для отслеживания нижнего канала Дончиана на графике M5 до OrderOpenPrice. Стоп-лосс не должен следовать за каналом Дончиана на графике М5 за пределами цены открытия ордера. Он перемещается в безубыток.

2. Иногда большая свеча закрывается за пределами OrderOpenPrice, поэтому вторая часть кода должна вернуть ее только в безубыток.

3. Стоп-лосс отслеживает лоу Дончиана на графике H4, как только канал Дончиана на графике H4 превысит OrderOpenPrice.

Каналы Дончиана кодируются следующим образом:

DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPeriod, TimingChartShift + 1));

DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPeriod, TimingChartShift + 1));

Я проверил журнал, и стоп-лосс модифицируется до ТОЧНОЙ цены открытия ордера (он не ниже, даже на долю пункта, что заставило бы его отслеживать лоу Дончиана на графике M5.

Кто-нибудь знает, из-за чего это происходит?

 
crsnape@btinternet.com:
Привет всем,

Кто-нибудь знает, почему мой модифицированный ордер стоп-лосс работает неправильно?

Стоп лосс очень быстро перемещается между DonchianLowM5 и OrderOpenPrice, когда DonchianLowM5 движется выше OrderOpenPrice.

Вот код (извините, не знаю, как правильно вставить).

//--- Движение стоп-лосса

if (OrdersTotal() > 0)

{

for (int i = 0; i < OrdersTotal(); i++)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUY)

{

if (OrderStopLoss() < OrderOpenPrice())

{

if (DonchianLowM5 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), Green);

}

}

if (OrderStopLoss() > OrderOpenPrice())

{

if (DonchianLowH4 <= OrderOpenPrice())

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);

}

}

if (OrderStopLoss() >= OrderOpenPrice())

{

if (DonchianLowH4 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), Green);

}

}

}

Некоторые моменты вызывают недоумение.

Цель кода состоит в том, чтобы:

1. Модифицировать стоп-лосс для отслеживания нижнего канала Дончиана на графике M5 до OrderOpenPrice. Стоп-лосс не должен следовать за каналом Дончиана на графике М5 за пределами цены открытия ордера. Он перемещается в безубыток.

2. Иногда большая свеча закрывается за пределами OrderOpenPrice, поэтому вторая часть кода должна вернуть ее только в безубыток.

3. Стоп-лосс отслеживает лоу Дончиана на графике H4, как только канал Дончиана на графике H4 превысит OrderOpenPrice.

Каналы Дончиана кодируются следующим образом:

DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPeriod, TimingChartShift + 1));

DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPeriod, TimingChartShift + 1));

Я проверил журнал и стоп-лосс изменяется ТОЧНО до цены открытия ордера (он не ниже, даже на долю пункта, что заставило бы его отслеживать Donchian Low на графике M5.

Кто-нибудь знает, из-за чего это происходит?

Вы используете DonchianLowM5 и DonchianLowH4 (я предполагаю, что это разные значения). Это может вызвать у вас проблему

 

Здравствуйте, Младен,

Спасибо за ваш ответ.

DonchianLowM5 и DonchianLowH4 - это разные значения, но каждое из них имеет свое назначение. DonchianLowM5 используется для настройки SL на безубыточность на ранних стадиях торговли. DonchianLowH4 настраивает SL как механизм трейлинг-стопа. Это должно вступить в силу только после того, как DonchianLowH4 превысит OrderOpenPrice.

Я изучил этот вопрос немного подробнее и, возможно, нашел проблему. Я хотел определить, переставляет ли функция OrderModify SL точно в соответствии с OrderOpenPrice. Но это не так. OrderOpenPrice в моем журнале указан как 1.12224, точность 5 цифр, а в функции Print ниже указано, что OrderOpenPrice имеет только 4 цифры. Поэтому SL будет использовать эту 4-значную цифру, а не 5-значную. Мне нужно, чтобы она использовала 5-значную.

Как я могу заставить функцию ordermodify настроить SL на ТОЧНУЮ цену открытия заказа в 5 цифр?

Вот мой код:

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);

Print("SL изменен на цену открытия ордера ", OrderOpenPrice());

}

Я пробовал это, но это не работает:

OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), Green);

Print("SL изменен на цену открытия ордера ", OrderOpenPrice());

У моего брокера 5 цифр, потому что журнал подтверждает цену, по которой он открыл ордер - 1.12224.

Надеюсь, мое объяснение имеет смысл. Есть идеи?

 
crsnape@btinternet.com:
Здравствуйте, Младен,

Спасибо за ваш ответ.

DonchianLowM5 и DonchianLowH4 - это разные значения, но каждое из них имеет свое назначение. DonchianLowM5 используется для настройки SL на безубыточность на ранних стадиях торговли. DonchianLowH4 настраивает SL как механизм трейлинг-стопа. Это должно вступить в силу только после того, как DonchianLowH4 превысит OrderOpenPrice.

Я изучил этот вопрос немного подробнее и, возможно, нашел проблему. Я хотел определить, переставляет ли функция OrderModify SL точно в соответствии с OrderOpenPrice. Но это не так. OrderOpenPrice в моем журнале указан как 1.12224, точность 5 цифр, а в функции Print ниже указано, что OrderOpenPrice имеет только 4 цифры. Поэтому SL будет использовать эту 4-значную цифру, а не 5-значную. Мне нужно, чтобы она использовала 5-значную.

Как я могу заставить функцию ordermodify настроить SL на ТОЧНУЮ цену открытия заказа в 5 цифр?

Вот мой код:

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), Green);

Print("SL изменен на цену открытия ордера ", OrderOpenPrice());

}

Я пробовал это, но это не работает:

OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), Green);

Print("SL изменен на цену открытия ордера ", OrderOpenPrice());

У моего брокера 5 цифр, потому что журнал подтверждает цену, по которой он открыл ордер - 1.12224.

Надеюсь, мое объяснение имеет смысл. Есть идеи?

Тот факт, что вы получаете цену с точностью до 4 цифр, не является проблемой: просто используйте эту функцию Print(DoubleToStr(OrderOpenPrice(),Digits)); и вы получите правильную распечатку. Проблема в чем-то другом, и я подумал, что если вы сравниваете с двумя совершенно разными ценами, то это может вызвать такие проблемы

 

О, да.

Что вы имеете в виду? У меня неправильная структура скобок?

Код должен выбрать либо DonchianLowM5, либо DonchianLowH4 в зависимости от ситуации.

Может быть, я неправильно строю скобки вверх, вниз для каждого элемента кода.

 

Попробуйте упростить код. Что-то вроде прилагаемого

PS: проверьте, та ли это логика, которую вы имели в виду.

Файлы:
 

Здравствуйте, вот я два индикатора, один основан на RSI и другой на индексе силы, но проблема просит меня rsi ищет кривые, он указывает не то, что я хочу, если у вас есть решение, очевидно, я могу отправить вам файл, если необходимо, спасибо за вашу помощь ... извините за английский "google traductor"