Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 52
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Что делать если стоп\тейк 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
И где "несправедливость"?
Если 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
ожидается что 117+(200*_Point) даст на выходе 117.200
...Ну так он столько и даёт... Я ж показал расчёт. Или у вас мультивалютник, и данные берёте с "неродного" символа?
Тогда вместо Point() и Digits() используйте SymbolInfoDouble() и (int)SymbolInfoInteger()
Ну так он столько и даёт... Я ж показал расчёт. Или у вас мультивалютник, и данные берёте с "неродного" символа?
Тогда вместо Point() и Digits() используйте SymbolInfoDouble() и (int)SymbolInfoInteger()
Спасибо, работает)))
В данный момент ищу способ вставить трейлинг в цепочку ордеров
выбрано 10 ордеров с шагом 200 от 115.000 до 117.000
каждый лот на величину х больше предыдущего
цель - поставить трейлинг на всю пачку ордеров из расчета (средняя цена)+(у*_Point)
сам трейлинг у меня есть, вопрос как его прикрутить к средней цене на всю пачку и как она считается в зависимости от лотов
Спасибо, работает)))
В данный момент ищу способ вставить трейлинг в цепочку ордеров
выбрано 10 ордеров с шагом 200 от 115.000 до 117.000
каждый лот на величину х больше предыдущего
цель - поставить трейлинг на всю пачку ордеров из расчета (средняя цена)+(у*_Point)
сам трейлинг у меня есть, вопрос как его прикрутить к средней цене на всю пачку и как она считается в зависимости от лотов
Один универсальный совет: Учись программировать с нуля. Тогда не будет таких вопросов, программирование это не лего.
И по сути вопроса: Значит надо перебрать ВСЕ ордера в цикле выбирая только "нужные" и их модифицировать. Но надо очень внимательно подходить к этому вопросу, так-как вероятность замены выбранного ордера для работы очень высока.
Один универсальный совет: Учись программировать с нуля. Тогда не будет таких вопросов, программирование это не лего.
И по сути вопроса: Значит надо перебрать ВСЕ ордера в цикле выбирая только "нужные" и их модифицировать. Но надо очень внимательно подходить к этому вопросу, так-как вероятность замены выбранного ордера для работы очень высока.
Всем доброго времени суток, написал советник на основе МА. (КОД ПРИЛАГАЕТСЯ НИЖЕ) Сам не давно занялся написанием на 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);
}
Она не высока, а 100% В текущее время тралю последний, а остальные на паузе, но схема неточная и хотелось бы сделать лучше
Нет, не 100%. Или ты говоришь о чём-то другом.
В общем алгоритм такой:
Организуешь цикл перебора всех ордеров.
Выбираешь очередной ордер для работы с ним.
Проверяешь нужен-ли этот ордер... Если нет, то следующая итерация цикла...
Если "нужный" то проверяешь подходит-ли он для модификации. Простым сравнением на сколько он удалён от своего уровня StopLoss
Если удалённость достаточна, то модифицируешь ордер.
Так вот если у тебя есть функция модификации в которой есть цикл по всем ордерам, а перед её вызовом работает тоже цикл, то тут и будет замена выбранного ордера...
Нет, не 100%. Или ты говоришь о чём-то другом.
В общем алгоритм такой:
Организуешь цикл перебора всех ордеров.
Выбираешь очередной ордер для работы с ним.
Проверяешь нужен-ли этот ордер... Если нет, то следующая итерация цикла...
Если "нужный" то проверяешь подходит-ли он для модификации. Простым сравнением на сколько он удалён от своего уровня StopLoss
Если удалённость достаточна, то модифицируешь ордер.
Так вот если у тебя есть функция модификации в которой есть цикл по всем ордерам, а перед её вызовом работает тоже цикл, то тут и будет замена выбранного ордера...