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

 
mladen:
macerina

Только первая часть (остальное - просто вариация этого) :

если ema(7) < ema(21) и предыдущая ema(7) < предыдущей ema(21), то если ema(of rsi(14),9) < rsi(14) сигнал на покупку

можно сказать и так:

если macd(7,12) < и предыдущий macd(7,12) < 0 то если ema(of rsi(14),9) < rsi(14) сигнал на покупку

Спасибо за ответ mladen возможно ли закодировать индикатор mt4 с этим критерием

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

 
macerina:
Спасибо за ответ mladen возможно ли сделать индикатор для mt4 с такими критериями Спасибо заранее

macerina

Это простая система macd + rsi. Я думаю, что такая уже есть. Если такой нет, то легко сделать индикатор и тогда он будет сделан.

 
mladen:
Пожалуйста, опубликуйте часть кода, где вы пытаетесь достичь того, что вы описали здесь: https: //www.mql5.com/en/forum/174385/page162 (не 3 тейк-профита, размещаемые на ордерах и 3 трейлинг-стопа, а часть, которая пытается сделать именно то, что вы описали) и тогда, возможно, кто-то сможет помочь вам с кодированием.

// подсчет открытых ордеров на покупку.

iOpenOrders_Buy = CntOrd(iOrderType_Buy,MagicNumber,Symbol());

// подсчет открытых ордеров на продажу.

iOpenOrders_Sell = CntOrd(iOrderType_Sell,MagicNumber,Symbol());

if (iOpenOrders_Buy==3 || iOpenOrders_Sell==3)

{

if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop);

}

if (iOpenOrders_Buy==1 || iOpenOrders_Sell==1)

{

if(TrailingStop_2>0 && TrailingStart_2 > 0) TrailOrder_3 (TrailingStart_2, TrailingStop_2);

}

//////////////////////////////////////////////////////////////////////////////////////////////

Это была часть, где советник ищет количество открытых ордеров для присоединенной пары.

Если он находит 3 ордера, он будет следовать обычной функции Trailing Stop. А если он обнаружит, что работает только одна сделка, то он будет следовать второй функции трейлинг-стопа.

Это работает "ОК" для одной пары, но когда я прикрепляю этот советник к нескольким графикам (парам), он не работает, так как он получает все открытые ордера через функцию "OrdersTotal()".

Сразу приходит на ум одна проблема: как узнать, что было 3 ордера, а остался только один (в советнике нет ни одной строки кода, которая бы пыталась это выяснить)

//End - Close open sell positions------------------------------------------

double OpenPrice=Ask;

int count=3;

if (count==3)

{

BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",MagicNumber, 0,Blue);

if (BuyOrder_1>0) //Проверка, был ли открыт ордер или нет

{

sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Ордер на покупку 1 отправлен успешно. Ticket=" + BuyOrder_1;

count = count - 1;

//////////////////////////////////////////////////////////////

Таким образом, count уменьшается и открывает ордера до тех пор, пока count=1. Таким образом, открывается 3 ордера, так как изначально count=3.

 
Oridroo:
//считать открытые ордера на покупку.

iOpenOrders_Buy = CntOrd(iOrderType_Buy,MagicNumber,Symbol());

// подсчет открытых ордеров на продажу.

iOpenOrders_Sell = CntOrd(iOrderType_Sell,MagicNumber,Symbol());

if (iOpenOrders_Buy==3 || iOpenOrders_Sell==3)

{

if(TrailingStop>0 && TrailingStart > 0) TrailOrder (TrailingStart, TrailingStop);

}

if (iOpenOrders_Buy==1 || iOpenOrders_Sell==1)

{

if(TrailingStop_2>0 && TrailingStart_2 > 0) TrailOrder_3 (TrailingStart_2, TrailingStop_2);

}

//////////////////////////////////////////////////////////////////////////////////////////////

Это была часть, где советник ищет количество открытых ордеров для присоединенной пары.

Если он находит 3 ордера, он будет следовать обычной функции Trailing Stop. А если он обнаружит, что работает только одна сделка, то он будет следовать второй функции трейлинг-стопа.

Это работает "ОК" для одной пары, но когда я прикрепляю советника к нескольким графикам (парам), он не работает, так как он получает все открытые ордера через функцию "OrdersTotal()".

//Завершение - Закрытие открытых позиций на продажу------------------------------------------

double OpenPrice=Ask;

int count=3;

if (count==3)

{

BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",MagicNumber, 0,Blue);

if (BuyOrder_1>0) //Проверка, был ли открыт ордер или нет

{

sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + " Ордер на покупку 1 отправлен успешно. Ticket=" + BuyOrder_1;

count = count - 1;

//////////////////////////////////////////////////////////////

Таким образом, счетчик уменьшается и открывает ордера до тех пор, пока счетчик не станет равен 1. Таким образом, открывается 3 ордера, так как изначально count=3.

Вопрос в следующем: откуда он знает, что когда-то было 3 открытых ордера, а потом остался только один? То, что остался только один открытый ордер, ни о чем не говорит. Вы должны проверить список закрытых ордеров на наличие 2 других ордеров, которые были частью триплета, а поскольку брокеры могут изменить поле комментария, нет способа узнать, что некоторые ордера были частью одного и того же триплета (нет поля в списке ордеров, которое можно использовать, чтобы отметить, что некоторые ордера принадлежат к одной группе ордеров).

Можно попробовать использовать файлы для сохранения номеров билетов, которые принадлежали к триплетам, но в случае попытки использовать тот же советник с другого терминала, можно получить ужасные ошибки. То же самое может произойти при переустановке metatrader. Использование глобальных переменных еще хуже (это почти то же самое, что использование файлов, только хуже), поэтому нет никакого осмысленного способа правильно отследить триплеты ордеров.

Как же узнать, что 1 открытый ордер - это последний открытый ордер из трех или это первый открытый ордер нового триплета ордеров?

 
mladen:
Вопрос был в следующем: как он узнает, что было 3 открытых ордера, а потом остался только один? Тот факт, что остался только один открытый ордер, ни о чем не говорит. Вы должны проверить список закрытых ордеров для 2 других ордеров, которые были частью тройки, и так как брокеры могут изменить ваше поле комментария, нет никакого способа, как вы можете узнать, что некоторые ордера были частью той же тройки (нет поля в списке ордеров, которые могут быть использованы, чтобы отметить, что некоторые ордера принадлежат к той же группе ордеров). Так как же вы узнаете, что 1 открытый ордер является последним открытым ордером из 3 или это первый открытый ордер новой тройки ордеров?

Младен,

Ckeck вам PM, нужен кодер

Мечтаю о БОЛЬШОЙ иконке для PM!

 
mladen:
Так как же узнать, что 1 открытый ордер - это последний открытый ордер из трех или это первый открытый ордер новой тройки ордеров?

Существует условие:

if (MA_Difference_1>=Value_Diff && iOpenOrders_Buy ==0).

Этим я гарантирую, что если существует какой-либо существующий ордер на покупку, он не будет открывать новый ордер на покупку, несмотря на выполнение условий. Он откроет новый ордер только тогда, когда не будет ни одного существующего ордера на покупку/продажу.

А так как он открывает одновременно 3 ордера одного типа (покупка/продажа) и если два из них уже закрыты, то оставшийся ордер точно такого же типа.

Я проверил это. Так что никакой путаницы в этом нет.

 
Oridroo:
Есть условие:

if (MA_Difference_1>=Value_Diff && iOpenOrders_Buy ==0)

Этим я гарантирую, что если есть существующий ордер на покупку, он не откроет новый ордер на покупку, несмотря на выполнение условий. Он откроет новый ордер только тогда, когда не будет ни одного существующего ордера на покупку/продажу.

А поскольку он открывает одновременно 3 ордера одного типа (покупка/продажа), и если два из них уже закрыты, то оставшийся ордер точно такого же типа.

Я его проверил. Чтобы не было путаницы.

Во всей этой истории есть много предположений. Первое из них заключается в том, что когда вы пытаетесь открыть 3 ордера, он действительно откроет 3 ордера. А что если он откроет только 1? И так далее...

Извините. Но похоже, что мы все время говорим о разных вещах. Надеюсь, кто-нибудь сможет вам помочь, так как я не могу.

Счастливая торговля

 
mladen:
Во всей этой истории есть много предположений. Первое - это то, что когда вы пытаетесь открыть 3 ордера, он действительно откроет 3 ордера. А что если он откроет только 1? И так далее ...

Простите. Но кажется, что мы все время говорим о разных вещах. Надеюсь, кто-нибудь сможет вам помочь, раз уж я не могу.

Удачной торговли

Если вы не можете, все в порядке.

Я тестировал его некоторое время с разными брокерами, и до сих пор он не "не смог" открыть 3 ордера.

В любом случае, я думаю, вы могли бы сказать, по крайней мере, какой момент/логика заставляет советника различать разные пары, пока я вызываю 'OrdersTotal()'?

Любой маленький пример советника будет отлично.

 
macerina:
Спасибо за ответ mladen возможно ли закодировать индикатор mt4 с этим критерием Спасибо заранее

мацерина

Посмотрите индикатор в этом посте: https: //www.mql5.com/en/forum/173574/page432. Он почти точно такой же, как тот, который описан в графическом коде Aspen.

 

Спасибо Младену за код ... Имеет ли он двойное сравнение macd и пересечение 50, как вы объяснили в предыдущей логике.

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