Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 311

 
ALXIMIKS:

здравствуйте, перефразируйте то что спрашиваете, так не очень понятно все.


спасибо, что откликнулись. В моем советнике :

if( условие)

{открываются два ордера buystop и sellstop}

и необходимо, чтобы при открытии одной из позиций удалялся ближайший ордер и именно ближайший, потому что в этот момент могут стоять и другие ордера - подальше от настоящей цены

может, тут применить счетчик открытых позиций + скрипт на удаление ордера ( если я правильно думаю, то не знаю, как это сделать- только начинаю) Заранее благодарен за информацию.

 
PGM5:


и необходимо, чтобы при открытии одной из позиций удалялся ближайший ордер и именно ближайший, потому что в этот момент могут стоять и другие ордера - подальше от настоящей цены

может, тут применить счетчик открытых позиций + скрипт на удаление ордера ( если я правильно думаю, то не знаю, как это сделать- только начинаю) Заранее благодарен за информацию.


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

Вы ставите два отложенных ордера, если открывается один то нужно удалить что?

Ближайший ордер - замечательное понятие, ближайший ордер по направлению открытой позиции или против, или вы говорите что нужно удалить противоположный отложенный?

Стоят другие ордера - откуда они стоят? от ручной торговли? от этого же советника но открыты по иным условиям?

Вам нужен конкретный ответ или такая же размазня как и вопрос? (потратьте лишнюю минуту формулируя вопрос - пользы от этого будет всем)

 
ALXIMIKS:

Читая эти строки вспоминаю как меня самого упрекали за неграмотность в сообщениях, точнее лень, и сейчас осознаю свою неправоту еще больше.

1) что такое рисовалка? (в вашем понимании)

2) что такое элементарные функции для поиска дивергенции у MACD?

3) написать в поисковике "дивергенция" и выбрать третью ссылку в категории "Code Base" так сложно?

(если надеетесь что кто-то вам готовое даст и разжует все - надейтесь, люди разные у нас: верующие и не очень)



Надеюсь вы знаете, что такое проксемика!Бу дь те лю без ны!По вашему получается, что форум для того, чтоб грузить друг друга метафизикой?

Рисовалка - с выводом на график.

Элементарные функции это функции которые можно применять использую только учебник по MQL4, не используя сложных выражений.

Как пользоваться буферами индикатора при определении дивергенции по MACD:

как это понять?

for(i=limit-1; i>=0; i--) 
     {
      BufferMacdMain[i]   = iMACD(NULL, 0, macd_fast, macd_slow, macd_signal, PRICE_CLOSE, MODE_MAIN, i);
      BufferMacdSignal[i] = iMACD(NULL, 0, macd_fast, macd_slow, macd_signal, PRICE_CLOSE, MODE_SIGNAL, i);
      BufferMacdOsMA[i]   = BufferMacdMain[i] - BufferMacdSignal[i];
      BufferTop[i]        = EMPTY_VALUE;
      BufferBottom[i]     = EMPTY_VALUE;
      BufferCross[i]      = EMPTY_VALUE;
 
      double main2 = BufferMacdMain[i + 2];
      double main1 = BufferMacdMain[i + 1];
      double sig2  = BufferMacdSignal[i + 2];
      double sig1  = BufferMacdSignal[i + 1];
 
      if((main1>=sig1 && main2<sig2) || 
         (main1<sig1 && main2>=sig2))
 
Burger:


Надеюсь вы знаете, что такое проксемика!Бу дь те лю без ны!По вашему получается, что форум для того, чтоб грузить друг друга метафизикой?

Рисовалка - с выводом на график.

Элементарные функции это функции которые можно применять использую только учебник по MQL4, не используя сложных выражений.

Как пользоваться буферами индикатора при определении дивергенции по MACD:

как это понять?


Поначалу вникните что такое дивергенция и сколько значений для её определения нужно. Тут с примерами.
 
Burger:


Надеюсь вы знаете, что такое проксемика!Бу дь те лю без ны!По вашему получается, что форум для того, чтоб грузить друг друга метафизикой?

Рисовалка - с выводом на график.

Элементарные функции это функции которые можно применять использую только учебник по MQL4, не используя сложных выражений.

Как пользоваться буферами индикатора при определении дивергенции по MACD:

как это понять?


Здесь не клуб экстрасенсов, если нужны адекватные ответы - задавайте адекватные вопросы. Не знаете как сформулировать - заходите с далека, но так чтобы было понятно и не нужно было по сто раз переспрашивать, что под тем или иным термином конкретный индивидуум подразумевает.

Элементарные функции - это функции которые не используют сложных выражений. Шикарно.

Код без скобок закрытия цикла, без функций после условия - на что вы надеетесь?

for(i=limit-1; i>=0; i--)      //цикл  расчета нерассчитанных баров, наверное
     {
      BufferMacdMain[i]   = iMACD(NULL, 0, macd_fast, macd_slow, macd_signal, PRICE_CLOSE, MODE_MAIN, i);   // расчет значения основной   линии масд на i баре
      BufferMacdSignal[i] = iMACD(NULL, 0, macd_fast, macd_slow, macd_signal, PRICE_CLOSE, MODE_SIGNAL, i); // расчет значения сигнальной линии масд на i баре
      BufferMacdOsMA[i]   = BufferMacdMain[i] - BufferMacdSignal[i];  // разница основной и сигнальной линии масд на i баре
      BufferTop[i]        = EMPTY_VALUE;                              // буфер заполняется EMPTY_VALUE на i баре (не рисуется на графиках)
      BufferBottom[i]     = EMPTY_VALUE;                              // буфер заполняется EMPTY_VALUE на i баре (не рисуется на графиках)
      BufferCross[i]      = EMPTY_VALUE;                              // буфер заполняется EMPTY_VALUE на i баре (не рисуется на графиках)
 
      double main2 = BufferMacdMain[i + 2];                           // переменная берет значение основной линии масд на i+2 баре с массива BufferMacdMain
      double main1 = BufferMacdMain[i + 1];                           // переменная берет значение основной линии масд на i+1 баре с массива BufferMacdMain
      double sig2  = BufferMacdSignal[i + 2];                         // переменная берет значение сигнальной линии масд на i+2 баре с массива BufferMacdSignal
      double sig1  = BufferMacdSignal[i + 1];                         // переменная берет значение сигнальной линии масд на i+1 баре с массива BufferMacdSignal
 
      if((main1>=sig1 && main2<sig2) ||                      // если main1>=sig1 и main2<sig2 тогда будет выполнятся условие (сигнальная пересекает основную снизу вверх)
         (main1<sig1 && main2>=sig2))                        // если main1<sig и main2>=sig2 тогда будет выполнятся условие  (сигнальная пересекает основную сверху вниз)
 
ALXIMIKS:


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

Вы ставите два отложенных ордера, если открывается один то нужно удалить что?

Ближайший ордер - замечательное понятие, ближайший ордер по направлению открытой позиции или против, или вы говорите что нужно удалить противоположный отложенный?

Стоят другие ордера - откуда они стоят? от ручной торговли? от этого же советника но открыты по иным условиям?

Вам нужен конкретный ответ или такая же размазня как и вопрос? (потратьте лишнюю минуту формулируя вопрос - пользы от этого будет всем)

Да, вы все правильно поняли:при открытии одного ордера нужно удалить противоположный отложенный, другие ордера стоят от этого же советника, но открыты по иным условиям

Заранее благодарен.

 
PGM5:

Да, вы все правильно поняли:при открытии одного ордера нужно удалить противоположный отложенный, другие ордера стоят от этого же советника, но открыты по иным условиям

Заранее благодарен.


Если я правильно понял то, что Вы хотите: этот механизм называется OCO (One Cansel Other - один отменяет другой). Таким соотношением, например, связаны тейк и стоп для "рыночного ордера" (в терминах МТ4) - один (тейк или стоп) сработал, второй удалится автоматически и реализация в полном объеме это не такая уж тривиальная задача. Не в смысле весьма сложного алгоритма, а в том смысле, что элементарно не решается. Нужно писать параллельный учет ордеров: вводить и отслеживать признак, по которому ордера связаны. Если не ошибаюсь, то и в МТ5 такой механизм не реализовали, хотя для биржевых терминалов это стандартный функционал и работает на стороне сервера.

Можно реализовать механизм на стороне клиента, "поиграть" магиком (тогда будет "не очень" сложно): все ордера, из которых должен остаться один, имеют одинаковый магик. При проверке: если есть рыночный, то все остальные удаляются. Тогда магик нужно генерировать, сопровождать. Для магика выделить отдельный массив: сопровождать, возможно, придется не одну пару ордеров. Магики потерять нельзя, следовательно, или глобальные переменные, или запись в фал. Если делать более глобально (с учетом не только связности ордеров, но и для определения экспертом свой/чужой), то механизм учета усложняется: магик уже станет составным и это фактически нужно дополнять/расширять штатный алгоритм выставления ордеров гораздо глубже, чем это можно сделать с помощью "элементарных" (в Вашей терминологии) функций, но все равно это все на стороне клиента: то есть, при выключенном терминале или потери связи работать (отслеживать ордера) не будет.



 
VladislavVG:

Если я правильно понял, то что Вы хотите: этот механизм называется OCO (One Cansel Other - один отменяет другой). Таким соотношением, например, связаны тейк и стоп для "рыночного ордера" (в терминах МТ4) - один (тейк или стоп) сработал, второй удалится автоматически и реализация в полном объеме это не такая уж тривиальная задача. Не в смысле весьма сложного алгоритма, а в том смысле, что элементарно не решается. Нужно писать параллельный учет ордеров: вводить и отслеживать признак, по которому ордера связаны. Если не ошибаюсь, то и в МТ5 такой механизм не реализовали, хотя для биржевых терминалов это стандартный функционал и работает на стороне сервера.

Хотя, можно реализовать механизм на стороне клиента, "поиграть" магиком (тогда будет "не очень" сложно): все ордера, из которых должен остаться один, имеют одинаковый магик. При проверке: если есть рыночный, то все остальные удаляются. Тогда магик нужно генерировать, сопровождать. Для магика выделить отдельный массив: сопровождать, возможно, придется не одну пару ордеров. Магики потерять нельзя, следовательно, или глобальные переменные, или запись в фал. Если делать более глобально (с учетом не только связности ордеров, но и для определения экспертом свой/чужой), то механизм учета усложняется: магик уже станет составным и это фактически нужно дополнять/расширять штатный алгоритм выставления ордеров гораздо глубже, чем это можно сделать с помощью "элементарных" (в Вашей терминологии) функций, но все равно это все на стороне клиента: то есть, при выключенном терминале или потери связи работать (отслеживать ордера) не будет.



Извините, не знал, что все так сложно. Подумаю, как упростить систему.

 
PGM5:

Извините, не знал, что все так сложно. Подумаю, как упростить систему.



В помощь.
 


Это только весьма "скромная" реализация, к тому же не расширяемая: она удаляет все ордера советника или все ордера с данным магиком по данному инструменту при наличии рыночного. То есть, считает, что все ордера, выставленные по инструменту (с учетом/без учета магика), связаны соотношением ОСО.

Это может быть совсем не так. Например, из 20 выставленных ордеров могут быть 2-3 группы связных ордеров по 2 или 3, а остальные не связаны вообще. Этот советник до такого учета расширить не получится - нужно все переписывать или можно использовать этого советника в ручном режиме: тогда учет магиков связных групп ордеров нужно вести вручную и "вешать" столько советников, сколько групп ордеров в торговле.