Ваши вопросы по языку MQL4

mobidik

-----
вы не поняли мой вопрос...
логика работы - 1 сигнал - 1 ордер, и он должен открываться по переднему фронту сигнала! и вопрос - как это написать в коде???:facepalm:

Ups, таки сперва не понял...
А Вы, случаем, к радиотехнике имеете отношение?

Пробуйте такой вариант:

PHP:
int 1_ор_1_ус = 1;                             // переменная для условия 1-ордер на 1-условие.
                                                // присваиваем ей значение 1.
if(Ваше условие на бай  && 1_ор_1_ус==1)        // проверка условия на вход бай.
    {                                           // 
     ticket=OrderSend(Symbol(),OP_BUY,Lots ...  // открываем ордер ...
     if(ticket>0)                               // если ордер открылся
     1_ор_1_ус = 0;                             // тогда переменной 1_ор_1_ус присваиваем - 0.
    }                                           // как только
if(!Ваше условие на бай)                        // условие на вход бай перестало выполнятся,    
     1_ор_1_ус = 1;                             // тогда переменной 1_ор_1_ус присваиваем - 1.


Gnn-life
В предложенном мной варианте есть неточность, правильно будет так:


PHP:
if(Ваше условие на бай) возможен бай = 1;     // есть выполнение условия на вход бай, приваиваем перем. "возможен бай" - 1    
     
 Заменить на 
 
if(Ваше условие на бай) возможен бай = 1; else возможен бай = 0;
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
а можно ли как то закодить логику открытия ордеров в моем случае, чтобы ордера открывались по началу сигнала(условие A>B),смотрите ниже рисунок
Мне кажется в этом условии недостаточно информации. Какое состояние было перед тем как A стало больше В? Вот это и надо использовать как при пересечении двух МА или пересечении нулевого уровня. Было ниже стало выше.
 

mobidik

-----
имею конечно - работал в связи , радиолюбитель со стажем))
спасибо за код, надо врубиться главное, остальное мелочи..)

*hi* Как рыбак рыбака...
Аналогично: учился, трудился, с радиоэлектроникой дружу еще со школы, а сейчас, так же, познаю азы MQL.

На счет "надо врубиться" - аналогичная запись иногда используется в алертах у стрелочников, можешь посмотреть их коды в целях изучения.
Удачи и профита!!!
 

ksardas

Гуру форума
*hi* Как рыбак рыбака...
Аналогично: учился, трудился, с радиоэлектроникой дружу еще со школы, а сейчас, так же, познаю азы MQL.

Вот же - с 4 класса изучал журнал радио, сидел что-то паял , а потом пришла китайская микроэлектроника и все:not-good: отстал от жизни..
Привет братьям радиолюбителям*hi*
 

Gnn-life

Местный знаток
Mobidik,
Спасибо за отзывчивость:)
 
Последнее редактирование:

Milord

Местный знаток
Вот же - с 4 класса изучал журнал радио, сидел что-то паял , а потом пришла китайская микроэлектроника и все:not-good: отстал от жизни..
Привет братьям радиолюбителям*hi*
Привет!))
мне пофигу китайская электроника, за модой не гонюсь, если что сам собираю, то могу также использовать советские КТ315,361,802,803,805,808 транзисторы))):D
вопще мода - это капризная девка, лучше следовать своей интуиции, а не моде))
 

Ugar

Гуру форума
Привет!))
мне пофигу китайская электроника, за модой не гонюсь, если что сам собираю, то могу также использовать советские КТ315,361,802,803,805,808 транзисторы))):D
вопще мода - это капризная девка, лучше следовать своей интуиции, а не моде))
А чё сразу КТ, ты ещё вспомни МП37, МП39. У меня где то вроде ещё были, если не выбросил.
Где то был даже экземпляр П1А. Этот продам только за хорошие деньги.
Только при чём здесь mql4?
 
Последнее редактирование:

Milord

Местный знаток
А чё сразу КТ, ты ещё вспомни МП37, МП39. У меня где то вроде ещё были, если не выбросил.
Где то был даже экземпляр П1А. Этот продам только за хорошие деньги.
Только при чём здесь mql4?
есть и МП37-42, и даже МП15,МП20,МП25,26))))
но на них не собираю, продам на бирже))
MQL4 - чем то близок к радиотехнике, особенно цифровой ее части 00100011001010
а вы как считаете?)))
кстати,какое ваше мнение про мой вопрос - как сделать 1 ордер на 1 сигнал?
сигналом считать условие if(MA1>MA2),ниже кусок кода где нужно применить, желательно попроще в написании...
PHP:
extern int MaxOrders=5;

int start()
{
 if(OrdersTotal() < MaxOrders)
  {
//---------------------

   if(MA1>MA2)
    {
     OrderSend(....);
    }

//---------------------
  }
return(0);
}
 
Последнее редактирование:

Ugar

Гуру форума
есть и МП37-42, и даже МП15,МП20,МП25,26))))
но на них не собираю, продам на бирже))
MQL4 - чем то близок к радиотехнике, особенно цифровой ее части 00100011001010
а вы как считаете?)))
кстати,какое ваше мнение про мой вопрос - как сделать 1 ордер на 1 сигнал?
сигналом считать условие if(MA1>MA2),ниже кусок кода где нужно применить, желательно попроще в написании...
PHP:
extern int MaxOrders=5;

int start()
{
 if(OrdersTotal() < MaxOrders)
  {
//---------------------

   if(MA1>MA2)
    {
     OrderSend(....);
    }

//---------------------
  }
return(0);
}
Раз ты считаешь что язык mql4 похож на элементарную логику, буду объяснять с этой колокольни.
Когда то давно, собирал устройство для испытания аонов. Полной готовой схемы не было, пришлось некоторые схемы придумывать. Так вот, один узел никак не получалось запустить. По логике всё правильно, а осциллограф показывает что схема работает неправильно. Долго мучился, заставил работать. И работал он потом несколько лет, пока не потерял актуальность и я его не продал.
Так вот, потом, набравшись немного опыта, я понял почему этот узел не работал как надо. До сих пор удивляюсь почему он потом заработал и не сбоил. Логика ещё не всё что надо учитывать в схемах, даже если она на 561 логике. нужно думать о качестве работы схемы в не идеальных условиях.
У тебя кроме логических ошибок, есть ещё и ошибки связанные с качеством работы в неидеальных условиях.

Вообще 1 сигнал -> 1 ордер реализовывается элементарно.
Надо просто сделать переменную сигнала и её состояние завязать на исполнение приказа открыть.
А у тебя что? Сигнал это конкретная точка где надо открыть ордер.
Условие if(MA1>MA2) это не сигнал, а целый участок графика, по этому условию может быть много много точек, значит и ордеров может быть открыто много.
Этим условием if(OrdersTotal() < MaxOrders) просто запретил открывать ордеров больше заданного. Да и такое условие можно применять только для работы в тестере.
Подумай о сигнале. Он должен быть точкой где надо открыть ордер. А то получается что одна переменная больше другой, например в течении 6 часов, значить всё это время советник должен открывать ордера? Так он может много открыть.
 

Milord

Местный знаток
Раз ты считаешь что язык mql4 похож на элементарную логику, буду объяснять с этой колокольни....
У тебя кроме логических ошибок, есть ещё и ошибки связанные с качеством работы в неидеальных условиях.
Вообще 1 сигнал -> 1 ордер реализовывается элементарно.
Надо просто сделать переменную сигнала и её состояние завязать на исполнение приказа открыть.
А у тебя что? Сигнал это конкретная точка где надо открыть ордер.
Условие if(MA1>MA2) это не сигнал, а целый участок графика, по этому условию может быть много много точек, значит и ордеров может быть открыто много....

спасибо за ответ инженера, правда мне это не добавило ясности нисколько - как же написать в коде что мне нужно?хотя бы в идельном варианте работы кода?(я не профи MQL4, а только учусь, тот кто считает сам себя профи - автоматически остановился в развитии))
это я и сам знаю, что в моем куске кода будет открыто куча ордеров, потому что мой вариант сигнала if(MA1>MA2), что я и показал на диаграмме работы, в том случае как это должно работать, но проблема в том что мало знать как это должно работать в логике, надо уметь написать в коде...а иногда простое решение не приходит быстро...как сегодня глянул готовые коды функций безубытка и трала, так сразу понял сколько там лишнего и глупого кода...но возможно я ошибаюсь, как известно - все гениальное - просто!
P.S. кстати в цифровой технике появление на выходе 1ки, считается сигналом(импульсом), а то что вы назвали сигналом называется передним фронтом импульса...мне то как раз и нужно открыть ордер по переднему фронту сигнала в моем понимании!
 

Вложения

  • forex01.JPG
    forex01.JPG
    10 КБ · Просмотры: 15
Последнее редактирование:

matro3

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

Например:
PHP:
extern int MaxOrders=5;
extern int enterSignal=false;

int start()
{
 if(OrdersTotal() < MaxOrders)
  {
//---------------------

   if(MA1>MA2 && enterSignal)
    {
     if(OrderSend(....)) enterSignal = true;
    }
   else enterSignal = false;

//---------------------
  }
return(0);
}
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Я бы записывал в переменную.
Есть сигнал на вход в сделку - входим и помечаем в переменной что вход был.
Если не открылись, то не помечаем.
Теперь нужны условия для сброса этой переменной, чтоб по второму сигналу снова войти.
Видимо это доливки.

Например:
PHP:
extern int MaxOrders=5;
extern int enterSignal=false;

int start()
{
 if(OrdersTotal() < MaxOrders)
  {
//---------------------

   if(MA1>MA2 && enterSignal)
    {
     if(OrderSend(....)) enterSignal = true;
    }
   else enterSignal = false;

//---------------------
  }
return(0);
}
С такой последовательностью true и false ты никогда не откроешь ордер. Просто по невнимательности. Конечно поставив на тестер и увидев что код не работает ошибка будет найдена, но... невнимательность...:D
 

Павлс

Интересующийся
как написать в советнике открытие ордеров с шагом

Привет! Кто может подсказать как в советнике прописать открывание ордеров с шагом ! Например ордер на покупку цена выше поднялась и еще ордер на покупку открылся! Или советник похожий!
 

matro3

Почетный гражданин
))) Да, верно. Но и код рыбный...
*
PHP:
if(MA1 > MA2 && !enterSignal)
    {
     if(OrderSend(....)) enterSignal = true;
    }
if(MA1 < MA2) enterSignal = false;
 
Последнее редактирование:

planod

Интересующийся
Здравствуйте всем. Подскажите как можно определить угол наклона скользящей средней? Заранее спасибо.
 

Ugar

Гуру форума
глянул готовые коды функций безубытка и трала, так сразу понял сколько там лишнего и глупого кода...но возможно я ошибаюсь, как известно - все гениальное - просто!
P.S. кстати в цифровой технике появление на выходе 1ки, считается сигналом(импульсом), а то что вы назвали сигналом называется передним фронтом импульса...мне то как раз и нужно открыть ордер по переднему фронту сигнала в моем понимании!
Вот про это я и говорю. Условие if(MA1>MA2) это буквально тело импульса то есть 1. Передний фронт это: переход от 0 к 1. То есть момент пересечения МА.
По простому это будет:
OnTick()
{
static double LastMA1, LastMA2;
double MA1, MA2;
MA1=iMA(...);
MA2=iMA(...);
//Инициализация прошлого значения
if(LastMA1<0.0000001 || LastMA2<0.0000001)
{
LastMA1=MA1;
LastMA2=MA2;
}
//Если был 0, а стала 1 и количество ордеров не достигло максимального.
if(LastMA1<=LastMA2 && MA1>MA2 && OrdersTotal() < MaxOrders)
{
OrderSend(...);
}
LastMA1=MA1;
LastMA2=MA2;
}}
при каждом новом переднем фронте будет открываться ордер. это будет нормально работать в тестере. Для надёжной работы в реальных условиях, нужно добавить ооооочень много "лишнего" кода.
 
Последнее редактирование:

matro3

Почетный гражданин
Привет! Кто может подсказать как в советнике прописать открывание ордеров с шагом ! Например ордер на покупку цена выше поднялась и еще ордер на покупку открылся! Или советник похожий!

_http://tradelikeapro.ru/uvelichit-pribyil-so-sdelki/
 

Milord

Местный знаток
Привет! Кто может подсказать как в советнике прописать открывание ордеров с шагом ! Например ордер на покупку цена выше поднялась и еще ордер на покупку открылся! Или советник похожий!
нужно взять любой мартин, и посмотреть как в нем реализован шаг, например ниже кусок кода,далее нужно вникнуть в логику работы и переделать или не переделывать код
PHP:
if(OrderType() == OP_BUY)
     {
      if (Ask>=openprice+tp*Point)lots2=lots;
      if (Ask>=openprice+tp*Point)n=OrderSend(Symbol(),OP_BUY,lots2,Ask,3,0,0,"",0,0,Blue);
      if (Ask<=openprice-step*Point)lots2=lots2*mult;
      if (Ask<=openprice-step*Point)n=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lots2,1),Ask,3,0,0,"",0,0,Blue);
     }
   if(OrderType() == OP_SELL)
     {
      if (Bid<=openprice-tp*Point)lots2=lots;
      if (Bid<=openprice-tp*Point)n=OrderSend(Symbol(),OP_SELL,lots2,Bid,3,0,0,"",0,0,Red);
      if (Bid>=openprice+step*Point)lots2=lots2*mult;
      if (Bid>=openprice+step*Point)n=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lots2,1),Bid,3,0,0,"",0,0,Red);
     }
 
Верх