Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 52

 
trader781:

Что делать если стоп\тейк 200

но

tp=NormalizeDouble((price+(TakeProfit*_Point)),Digits); 

на доллар-иене даст 317.000 при курсе 117.000

ожидаемый результат 117.200 

Если Point()==0.001 (на USDJPY), то 200*0.001 равно 0.2

Теперь, если к 117.0 прибавить 0.2, то получим 117.2

И где "несправедливость"?

 
Artyom Trishkin:

Если Point()==0.001 (на USDJPY), то 200*0.001 равно 0.2

Теперь, если к 117.0 прибавить 0.2, то получим 117.2

И где "несправедливость"?

ожидается что 117+(200*_Point)  даст на выходе 117.200

на евродолларе нормально же тестится 

Виталий выше отписал, спасибо, тогда поищу выше сюрпризы

По ходу нашел

Думаю в качестве промежуточного алгоритма это вполне неплохо, теперь надо эти моменты как то фильтровать

https://www.mql5.com/ru/charts/6351907/audjpy-m5-metaquotes-software-corp 

График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
График AUDJPY, M5, 2017.01.02 22:49 UTC, MetaQuotes Software Corp., MetaTrader 4, Demo
  • www.mql5.com
Символ: AUDJPY. Период графика: M5. Брокер: MetaQuotes Software Corp.. Торговая платформа: MetaTrader 4. Режим торговли: Demo. Дата: 2017.01.02 22:49 UTC.
 
trader781:

ожидается что 117+(200*_Point)  даст на выходе 117.200

...

Ну так он столько и даёт... Я ж показал расчёт. Или у вас мультивалютник, и данные берёте с "неродного" символа?

Тогда вместо Point() и Digits() используйте SymbolInfoDouble() и (int)SymbolInfoInteger()

 
Artyom Trishkin:

Ну так он столько и даёт... Я ж показал расчёт. Или у вас мультивалютник, и данные берёте с "неродного" символа?

Тогда вместо Point() и Digits() используйте SymbolInfoDouble() и (int)SymbolInfoInteger()

Спасибо, работает)))

 

В данный момент ищу способ вставить трейлинг в цепочку ордеров

выбрано 10 ордеров с шагом 200 от 115.000 до 117.000 

каждый лот на величину х больше предыдущего

цель - поставить трейлинг на всю пачку ордеров из расчета (средняя цена)+(у*_Point) 

сам трейлинг у меня есть, вопрос как его прикрутить к средней цене на всю пачку и как она считается в зависимости от лотов

 
trader781:

Спасибо, работает)))

 

В данный момент ищу способ вставить трейлинг в цепочку ордеров

выбрано 10 ордеров с шагом 200 от 115.000 до 117.000 

каждый лот на величину х больше предыдущего

цель - поставить трейлинг на всю пачку ордеров из расчета (средняя цена)+(у*_Point) 

сам трейлинг у меня есть, вопрос как его прикрутить к средней цене на всю пачку и как она считается в зависимости от лотов

Один универсальный совет: Учись программировать с нуля. Тогда не будет таких вопросов, программирование это не лего.

И по сути вопроса: Значит надо перебрать ВСЕ ордера в цикле выбирая только "нужные" и их модифицировать. Но надо очень внимательно подходить к этому вопросу, так-как вероятность замены выбранного ордера для работы очень высока.

 
Alexey Viktorov:

Один универсальный совет: Учись программировать с нуля. Тогда не будет таких вопросов, программирование это не лего.

И по сути вопроса: Значит надо перебрать ВСЕ ордера в цикле выбирая только "нужные" и их модифицировать. Но надо очень внимательно подходить к этому вопросу, так-как вероятность замены выбранного ордера для работы очень высока.

Она не высока, а 100% В текущее время тралю последний, а остальные на паузе, но схема неточная и хотелось бы сделать лучше
 

Всем доброго времени суток,  написал советник на основе МА. (КОД ПРИЛАГАЕТСЯ НИЖЕ) Сам не давно занялся написанием на MQL4, потому решил начать с простого. Поэтому хотелось бы узнать, что я сделал не так. Суть советника проста: давать алерт при пересечении двух или трех МА (в зависимости от МЕТОДА: Агрессивный= пересечение двух МА, Консервативный= пересечение 3 МА)... И все. В рынок буду заходить сам. В советнике я прописал две функции: Агрессивную- это сигнал при простом пересечении двух самых быстрых МА и Консервативную, когда при пересечении двух быстрых МА нужно еще учитывать самую медленную (то есть сигнал по направлению тенденции). Проблема в том, что советник дает только ОДИН алерт (при его запуске или изменении таймфрейма), а на все последующие сигналы молчит! Буду признателен если скажете, в чем дело. Функции прописал по правилам MQL4 за всеми событиями. Можно было бы конечно без функций все прописать  в событии On Tick, но хотелось бы функции отдельно прописывать, чтоб легко можно было вызывать функции и к тому же хочется со временем добавить новые функции "фильтры".

Код 

================================================================================================ 

 extern bool Metod=false; // выбор метода: Консервативний или Агрессивный

extern int Time_Frame=1;//Таймфрейм

input bool Metod=false; //Консервативный-TRUE | Агрессивный-FALSE

extern int FastMA_Parametr=5;

extern int MidMA_Parametr=8;

extern int SlowMA_Parametr=18;

extern int TrendMA=163;

extern bool DemarkGo=false;

extern int Demperiod=4;

int rez;// если пересечение МА вниз, то rez=-1. если вверх rez=1.

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

 // Инициализируем МА

 double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,3,0,0);// Быстрая  МА

 double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,3,0,0);// Средняя  МА

 double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,1,0,0); Медленная МА


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

 int OnInit()

 {

rez=0;

   return(INIT_SUCCEEDED);

  } 

//=======================================

//------------------------------------------------------------------------------

void OnDeinit(const int reason)

  {



  }

//=============================================

//+---------------------Функция Консервативного сигнала если Metod=true---------------------------------------------+

int Konservative()

// Проверка пересечения вверх 3-х линий

{

if (Metod==true)


{

 if(FastMA>MiddiMA&&MiddiMA>SlowMA&&rez<=0)

  { 

 Alert(Symbol(),Time_Frame,"  ----ВВЕРХ----. Консервативное"); 

 rez=1; 

Comment("FastMA ",FastMA,"    MiddiMA ",MiddiMA,"   "," SlowMA  ",SlowMA,"  rez  ",rez);

return(rez);


}


// Проверка пересечения вниз 3-х линий

if(FastMA<MiddiMA&&MiddiMA<SlowMA&&rez>=0)

 { 

 Alert(Symbol(),Time_Frame,"  ----ВНИЗ----. Консервативное"); 

 rez=-1; 

Comment("FastMA ",FastMA,"    MiddiMA ",MiddiMA,"   "," SlowMA  ",SlowMA,"  rez  ",rez);

return(rez);


}

}

return(rez);

//=================================================

 

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Функция Агрессивного сигнала если 

int Agressive()

// Проверка пересечения вверх 2-х линий без медленной


{

if (Metod==false)

{

if(FastMA>MiddiMA&&rez<=0)

 Alert(Symbol(),Time_Frame," ----ВВЕРХ----. Агрессивное"); 

 rez=1; 

Comment("FastMA ",FastMA,"    MiddiMA ",MiddiMA,"   "," SlowMA  ",SlowMA,"  rez  ",rez);


}


// Проверка пересечения вниз 2-х линий без медленной

 

 if(FastMA<MiddiMA&&rez>=0)

{

 Alert(Symbol(),Time_Frame,"  ----ВНИЗ----. Агрессивное"); 

 rez=-1; 

Comment("FastMA ",FastMA,"    MiddiMA ",MiddiMA,"   "," SlowMA  ",SlowMA,"  rez  ",rez);

}

}

return(rez);

 
Олег:


На, думаю сможешь допилить сам
Файлы:
6645.mq4  7 kb
 
trader781:
Она не высока, а 100% В текущее время тралю последний, а остальные на паузе, но схема неточная и хотелось бы сделать лучше

Нет, не 100%. Или ты говоришь о чём-то другом.

В общем алгоритм такой:

Организуешь цикл перебора всех ордеров.

Выбираешь очередной ордер для работы с ним.

Проверяешь нужен-ли этот ордер... Если нет, то следующая итерация цикла...

Если "нужный" то проверяешь подходит-ли он для модификации. Простым сравнением на сколько он удалён от своего уровня StopLoss

Если удалённость достаточна, то модифицируешь ордер.


Так вот если у тебя есть функция модификации в которой есть цикл по всем ордерам, а перед её вызовом работает тоже цикл, то тут и будет замена выбранного ордера...

 
Alexey Viktorov:

Нет, не 100%. Или ты говоришь о чём-то другом.

В общем алгоритм такой:

Организуешь цикл перебора всех ордеров.

Выбираешь очередной ордер для работы с ним.

Проверяешь нужен-ли этот ордер... Если нет, то следующая итерация цикла...

Если "нужный" то проверяешь подходит-ли он для модификации. Простым сравнением на сколько он удалён от своего уровня StopLoss

Если удалённость достаточна, то модифицируешь ордер.


Так вот если у тебя есть функция модификации в которой есть цикл по всем ордерам, а перед её вызовом работает тоже цикл, то тут и будет замена выбранного ордера...

дело в том что в цепочке ВСЕГДА будут находится убыточные ордера с каким  - то лотом который тоже придется тралить за счет остальных. Триггер срабатывания - время закрытия. Если хоть один закрыть кроется вся цепочка. Поэтому вопрос, как тралить именно среднюю цену по всем выбранным.
Причина обращения: