Ответить
13.12.2014, 01:25
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,774
Поблагодарили 9,201 раз(а) / Репутация: 9206
вы не поняли мой вопрос...
логика работы - 1 сигнал - 1 ордер, и он должен открываться по переднему фронту сигнала! и вопрос - как это написать в коде???
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
[свернуть]

Последний раз редактировалось mobidik; 13.12.2014 в 01:53.
13.12.2014, 07:03
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711
А Вы, случаем, к радиотехнике имеете отношение?

Пробуйте такой вариант:
имею конечно - работал в связи , радиолюбитель со стажем))
спасибо за код, надо врубиться главное, остальное мелочи..)
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
13.12.2014, 07:10
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
а можно ли как то закодить логику открытия ордеров в моем случае, чтобы ордера открывались по началу сигнала(условие A>B),смотрите ниже рисунок
Мне кажется в этом условии недостаточно информации. Какое состояние было перед тем как A стало больше В? Вот это и надо использовать как при пересечении двух МА или пересечении нулевого уровня. Было ниже стало выше.
13.12.2014, 09:27
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,774
Поблагодарили 9,201 раз(а) / Репутация: 9206
имею конечно - работал в связи , радиолюбитель со стажем))
спасибо за код, надо врубиться главное, остальное мелочи..)
Как рыбак рыбака...
Аналогично: учился, трудился, с радиоэлектроникой дружу еще со школы, а сейчас, так же, познаю азы MQL.

На счет "надо врубиться" - аналогичная запись иногда используется в алертах у стрелочников, можешь посмотреть их коды в целях изучения.
Удачи и профита!!!
Milord 
13.12.2014, 13:51
Регистрация: 20.10.2013 / Адрес: Лас-Пальмас-де-Гран-Канария / Сообщений: 701
Поблагодарили 2,599 раз(а) / Репутация: 2596
Как рыбак рыбака...
Аналогично: учился, трудился, с радиоэлектроникой дружу еще со школы, а сейчас, так же, познаю азы MQL.
Вот же - с 4 класса изучал журнал радио, сидел что-то паял , а потом пришла китайская микроэлектроника и все отстал от жизни..
Привет братьям радиолюбителям
Ты не старайся, и у тебя всё получится.
13.12.2014, 22:01
Аватар для Gnn-life
Gnn-life Gnn-life вне форума Элитный участник
Регистрация: 09.04.2012 / Адрес: Питер / Сообщений: 515
Поблагодарили 1,042 раз(а) / Репутация: 1042
Mobidik,
Спасибо за отзывчивость

Последний раз редактировалось Gnn-life; 13.12.2014 в 22:03.
13.12.2014, 23:31
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711
Вот же - с 4 класса изучал журнал радио, сидел что-то паял , а потом пришла китайская микроэлектроника и все отстал от жизни..
Привет братьям радиолюбителям
Привет!))
мне пофигу китайская электроника, за модой не гонюсь, если что сам собираю, то могу также использовать советские КТ315,361,802,803,805,808 транзисторы)))
вопще мода - это капризная девка, лучше следовать своей интуиции, а не моде))
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
14.12.2014, 06:39
Регистрация: 13.03.2009 / Сообщений: 2,326
Поблагодарили 1,946 раз(а) / Репутация: 2019
Привет!))
мне пофигу китайская электроника, за модой не гонюсь, если что сам собираю, то могу также использовать советские КТ315,361,802,803,805,808 транзисторы)))
вопще мода - это капризная девка, лучше следовать своей интуиции, а не моде))
А чё сразу КТ, ты ещё вспомни МП37, МП39. У меня где то вроде ещё были, если не выбросил.
Где то был даже экземпляр П1А. Этот продам только за хорошие деньги.
Только при чём здесь mql4?
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 14.12.2014 в 06:42.
14.12.2014, 18:01
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711
А чё сразу КТ, ты ещё вспомни МП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);

тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 14.12.2014 в 18:11.
14.12.2014, 20:46
Регистрация: 13.03.2009 / Сообщений: 2,326
Поблагодарили 1,946 раз(а) / Репутация: 2019
есть и МП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 часов, значить всё это время советник должен открывать ордера? Так он может много открыть.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Milord 
15.12.2014, 00:42
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711
Раз ты считаешь что язык mql4 похож на элементарную логику, буду объяснять с этой колокольни....
У тебя кроме логических ошибок, есть ещё и ошибки связанные с качеством работы в неидеальных условиях.
Вообще 1 сигнал -> 1 ордер реализовывается элементарно.
Надо просто сделать переменную сигнала и её состояние завязать на исполнение приказа открыть.
А у тебя что? Сигнал это конкретная точка где надо открыть ордер.
Условие if(MA1>MA2) это не сигнал, а целый участок графика, по этому условию может быть много много точек, значит и ордеров может быть открыто много....
спасибо за ответ инженера, правда мне это не добавило ясности нисколько - как же написать в коде что мне нужно?хотя бы в идельном варианте работы кода?(я не профи MQL4, а только учусь, тот кто считает сам себя профи - автоматически остановился в развитии))
это я и сам знаю, что в моем куске кода будет открыто куча ордеров, потому что мой вариант сигнала if(MA1>MA2), что я и показал на диаграмме работы, в том случае как это должно работать, но проблема в том что мало знать как это должно работать в логике, надо уметь написать в коде...а иногда простое решение не приходит быстро...как сегодня глянул готовые коды функций безубытка и трала, так сразу понял сколько там лишнего и глупого кода...но возможно я ошибаюсь, как известно - все гениальное - просто!
P.S. кстати в цифровой технике появление на выходе 1ки, считается сигналом(импульсом), а то что вы назвали сигналом называется передним фронтом импульса...мне то как раз и нужно открыть ордер по переднему фронту сигнала в моем понимании!
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 15.12.2014 в 00:58.
15.12.2014, 04:44
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Я бы записывал в переменную.
Есть сигнал на вход в сделку - входим и помечаем в переменной что вход был.
Если не открылись, то не помечаем.
Теперь нужны условия для сброса этой переменной, чтоб по второму сигналу снова войти.
Видимо это доливки.

Например:
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);


Последний раз редактировалось matro3; 15.12.2014 в 04:47.
Milord 
15.12.2014, 05:54
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Я бы записывал в переменную.
Есть сигнал на вход в сделку - входим и помечаем в переменной что вход был.
Если не открылись, то не помечаем.
Теперь нужны условия для сброса этой переменной, чтоб по второму сигналу снова войти.
Видимо это доливки.

Например:
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 ты никогда не откроешь ордер. Просто по невнимательности. Конечно поставив на тестер и увидев что код не работает ошибка будет найдена, но... невнимательность...
matro3 , Milord 
15.12.2014, 08:38
Аватар для Павлс
Павлс Павлс вне форума Интересующийся
Регистрация: 26.02.2014 / Сообщений: 7
Поблагодарили 0 раз(а) / Репутация: 1

По умолчанию как написать в советнике открытие ордеров с шагом

Привет! Кто может подсказать как в советнике прописать открывание ордеров с шагом ! Например ордер на покупку цена выше поднялась и еще ордер на покупку открылся! Или советник похожий!
15.12.2014, 08:42
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
))) Да, верно. Но и код рыбный...
*
PHP код:
if(MA1 MA2 && !enterSignal)
    {
     if(
OrderSend(....)) enterSignal true;
    }
if(
MA1 MA2enterSignal false

Последний раз редактировалось matro3; 15.12.2014 в 08:45.
Milord 
15.12.2014, 08:52
Аватар для planod
planod planod вне форума Интересующийся
Регистрация: 24.12.2013 / Сообщений: 11
Поблагодарили 0 раз(а) / Репутация: 1
Здравствуйте всем. Подскажите как можно определить угол наклона скользящей средней? Заранее спасибо.
15.12.2014, 10:38
Регистрация: 13.03.2009 / Сообщений: 2,326
Поблагодарили 1,946 раз(а) / Репутация: 2019
глянул готовые коды функций безубытка и трала, так сразу понял сколько там лишнего и глупого кода...но возможно я ошибаюсь, как известно - все гениальное - просто!
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;
}}
при каждом новом переднем фронте будет открываться ордер. это будет нормально работать в тестере. Для надёжной работы в реальных условиях, нужно добавить ооооочень много "лишнего" кода.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 15.12.2014 в 10:52.
Milord 
15.12.2014, 15:39
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Привет! Кто может подсказать как в советнике прописать открывание ордеров с шагом ! Например ордер на покупку цена выше поднялась и еще ордер на покупку открылся! Или советник похожий!
_http://tradelikeapro.ru/uvelichit-pribyil-so-sdelki/
16.12.2014, 20:46
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711
Привет! Кто может подсказать как в советнике прописать открывание ордеров с шагом ! Например ордер на покупку цена выше поднялась и еще ордер на покупку открылся! Или советник похожий!
нужно взять любой мартин, и посмотреть как в нем реализован шаг, например ниже кусок кода,далее нужно вникнуть в логику работы и переделать или не переделывать код
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);
     } 
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
16.12.2014, 21:05
Аватар для Milord
Milord Milord вне форума Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 708 раз(а) / Репутация: 711
))) Да, верно. Но и код рыбный...
*
PHP код:
if(MA1 MA2 && !enterSignal)
    {
     if(
OrderSend(....)) enterSignal true;
    }
if(
MA1 MA2enterSignal false
а может лучше так?

PHP код:
if(MA1 MA2)
    {
     if(
OrderSend(....)) enterSignal true;
    }
if(
MA1 MA2enterSignal false
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 18:21. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO