Меньше кода, больше прока.. пишем советник - страница 5

 
Vladimir Simakov:

А что на выходе хотите получить? Я если честно не понял. Думал сначала, что а-ля фрейворк задумывается, но нет, ни классов оберток на индикаторы, ордера, стандартные алгоритмы принятия решения, ничего. Хотя гораздо читабельнее такие конструкци: fast.Get(2)>=slow.Get(1); (это я так, для примера), а объявление:

CMA fast=new CMA(NULL,0,12,...);

CMA slow=new CMA(NULL,0,100,...);

Вот это можно обсуждать, а у Вас, ИМХО, топтание на месте.

тоже для примера, вместо fast.Get(2)>=slow.Get(1); вполне легальный и рабочий код: 

table[FAST_MA][1] >=table[SLOW_MA][2]

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

по идее можно сделать (просто ещё не делал в конкретной библиотеке):

fast=table[FAST_MA]; slow=table[SLOW_MA];

и тогда fast[2]>slow[1] читается ещё проще

а все внутренние вычисления будут произведены "по требованию"

 
Maxim Kuznetsov:

тоже для примера, вместо fast.Get(2)>=slow.Get(1); вполне легальный и рабочий код: 

table[FAST_MA][1] >=table[SLOW_MA][2]

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

по идее можно сделать (просто ещё не делал в конкретной библиотеке):

fast=table[FAST_MA]; slow=table[SLOW_MA];

и тогда fast[2]>slow[1] читается ещё проще

а все внутренние вычисления будут произведены "по требованию"

Как-то костыльно получается. К буферам машек, которые терминал так и так создаст, мы еще добавляем массивы double. Я так понимаю, что память для них Вы будете на всю глубину истории резервировать (для M1 USHORT_MAX, если правильно помню,*8 байт) или по ходу действия планируете дорогой ArrayResize регулярно использовать?
 
Vasiliy Sokolov:

Согласен, очень сложно читать Ваш код, даже если знаешь язык. 

Фактически, это правило работает в отношении любого стороннего кода. Вопрос только в том, какой код не сложно, а легче читать.

И вот легче читать и править почти всегда MQL4-код. Угадали разработчики один раз.

 
fxsaber:

Фактически, это правило работает в отношении любого стороннего кода. Вопрос только в том, какой код не сложно, а легче читать.

И вот легче читать и править почти всегда MQL4-код. Угадали разработчики один раз.

А можно вопрос. В чем угадали? Стандартный С/С++, если не считать специфических запросов связанных с торговлей и графиками, так это как "windows.h" в С++ можно расценивать.

Так что респект разрабам, что не стали велосипед изобретать, хотя за запрет ссылок однозначный минус, я когда в С/С++ упал после mql, нарадоваться не мог. Поэтому, вдруг чудо случится, может рассмотрите, как вариант, по подобию С# usafe, специально для таких как я, типа хочешь об стену убиться - убейся, мы предупреждали.

 
Vladimir Simakov:

А можно вопрос. В чем угадали?

В кодобазе полно MT5-советников, которые являются переделками MT4-советников. Сравните код оригинала и переделки.


Очевидно, что разобраться в логике MT4-оригинала гораздо проще. Но еще проще, когда возникает необходимость в ТС что-то поправить. Не просто так MQL4 является стандартом обсуждения торговых алгоритмов на форумах во всем мире. Никакой другой язык, а именно MQL4. И он сыграл огромную роль в популярности MT4, а не наоборот.


Ну а если говорить о MT5-переделках, то они кривые - работают далеко не всегда. Простой пример. Шлете запрос на закрытие позиции, а получаете вместо закрытия торговый ордер. Там уйма всяких приколов, которые жутко решаются, чтобы выйти на реал. А в MT4 - просто и надежно.

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
fxsaber:

В кодобазе полно MT5-советников, которые являются переделками MT4-советников. Сравните код оригинала и переделки.


Очевидно, что разобраться в логике MT4-оригинала гораздо проще. Но еще проще, когда возникает необходимость в ТС что-то поправить. Не просто так MQL4 является стандартом обсуждения торговых алгоритмов на форумах во всем мире. Никакой другой язык, а именно MQL4. И он сыграл огромную роль в популярности MT4, а не наоборот.


Ну а если говорить о MT5-переделках, то они кривые - работают далеко не всегда. Простой пример. Шлете запрос на закрытие позиции, а получаете вместо закрытия торговый ордер. Там уйма всяких приколов, которые жутко решаются, чтобы выйти на реал. А в MT4 - просто и надежно.

Так это же дичь, работу с ордерами/позициями по аналогии делать. В mql4 у меня один класс обертка для этого, в mql5 два разных, ибо в mt4 - это одна сущность, а в mt5 две разные, сейчас в планах класс обертку на них реализовать и забыть про работу с ордерами, как уже пол-года на mql4.
 
И да, mt5 в том числе для работы на бирже создавался, а там другой принцип работы с ордерами/позициями, так, что учим мат. часть и не скулим, все там хорошо и ровно получается, только торговую механику биржи и форекса придется сначала выучить и учитывать их различия. Все, что для этого надо разрабы дали и в доках описали, а дальше уже только сам.
 
Vladimir Simakov:
Так это же дичь, работу с ордерами/позициями по аналогии делать. В mql4 у меня один класс обертка для этого, в mql5 два разных, ибо в mt4 - это одна сущность, а в mt5 две разные, сейчас в планах класс обертку на них реализовать и забыть про работу с ордерами, как уже пол-года на mql4.
Vladimir Simakov:
И да, mt5 в том числе для работы на бирже создавался, а там другой принцип работы с ордерами/позициями, так, что учим мат. часть и не скулим, все там хорошо и ровно получается, только торговую механику биржи и форекса придется сначала выучить и учитывать их различия. Все, что для этого надо разрабы дали и в доках описали, а дальше уже только сам.

Попробуйте расширить кругозор, т.к. вами написанное, действительно, скулеж.

 
Vladimir Simakov:
Как-то костыльно получается. К буферам машек, которые терминал так и так создаст, мы еще добавляем массивы double. Я так понимаю, что память для них Вы будете на всю глубину истории резервировать (для M1 USHORT_MAX, если правильно помню,*8 байт) или по ходу действия планируете дорогой ArrayResize регулярно использовать?

Память под них я конечно выделяю. На глубину не более чем нужна для расчётов и отладки. В приведённом фрагменте 30, что более чем достаточно. Если где-нибуть потребуется считать например стандартное отклонение глубиной 50, то кеш стоит увеличить. Да и то только ради ускорения рассчётов.

 
fxsaber:

Попробуйте расширить кругозор, т.к. вами написанное, действительно, скулеж.

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

CHedge::CheckOrder(void){
   if (!CheckPointer(cOrder)) return;
   switch(cOrder.Control()){
      case ORDER_FULL:        cPosition=NewPosition(cOrder);
      case ORDER_REMOVE:
      case ORDER_ERROR:       delete cOrder;}}
Причина обращения: