Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2475

 
Maxim Kuznetsov #:

вы же говорили что писали какого-то робота..

CopyBuffers из хендла iFractals за последние 100 (100500) баров в массив double[]. Проверяем значения, если пусто - значит нет фрактала, если не пусто то там его цена. Далее уже просто операторы сравнения < > :-)

Понял. Спасибо. Буду пробовать. 
 

Вот такой вопрос возник:  как поизящней имея тип сделки записать тип позиции?

Какие есть варианты, кроме тупого if else или тернарного оператора.

 
Alexey Viktorov #:

Вот такой вопрос возник:  как поизящней имея тип сделки записать тип позиции?

Какие есть варианты, кроме тупого if else или тернарного оператора.

switch

 
Artyom Trishkin #:

switch

Не интересно. Длиннее чем тернарный оператор.

 
Alexey Viktorov #:

Не интересно. Длиннее чем тернарный оператор.

зато правильнее ;-)

/// совсем почти в MQL стиле
bool DealTypeToPositionType(ENUM_DEAL_TYPE dealType,ENUM_POSITION_TYPE &savePosType) 
{
   bool ok=true;
   switch(dealType) {
      // что можем соотнести - соотносим
      case DEAL_TYPE_BUY: savePosType=POSITION_TYPE_BUY; break;
      case DEAL_TYPE_SELL: savePosType=POSITION_TYPE_SELL;break;
      //
      // some case`s skipped
      //
      // иначе тип сделки нельзя соотнести с типом позиции
      default: ok=false;
   }
   
   return ok;
}
 
Maxim Kuznetsov #:

зато правильнее ;-)

Правильных вариантов несколько. Если не использовать перечисление, то никаких вопросов и не возникает.

В структуре 

struct MqlTradeTransaction 
  { 
   ulong                         deal;             // Тикет сделки 
   ulong                         order;            // Тикет ордера 
   string                        symbol;           // Имя торгового инструмента 
   ENUM_TRADE_TRANSACTION_TYPE   type;             // Тип торговой транзакции 
   ENUM_ORDER_TYPE               order_type;       // Тип ордера 
   ENUM_ORDER_STATE              order_state;      // Состояние ордера 
   ENUM_DEAL_TYPE                deal_type;        // Тип сделки 
   ENUM_ORDER_TYPE_TIME          time_type;        // Тип ордера по времени действия 
   datetime                      time_expiration;  // Срок истечения ордера 
   double                        price;            // Цена  
   double                        price_trigger;    // Цена срабатывания стоп-лимитного ордера 
   double                        price_sl;         // Уровень Stop Loss 
   double                        price_tp;         // Уровень Take Profit 
   double                        volume;           // Объем в лотах 
   ulong                         position;         // Тикет позиции 
   ulong                         position_by;      // Тикет встречной позиции 
  };

тип сделки имеет тип ulong и тип позиции имеет тип ulong. И по значению они одинаковы. Следовательно, а какого июля изгаляться переводить типы в тип перечисления. Но вот хочется же… Читается приятней… А код, почти в полную страницу редактора не упрощает чтение.

 
Alexey Viktorov #:

Правильных вариантов несколько. Если не использовать перечисление, то никаких вопросов и не возникает.

В структуре 

тип сделки имеет тип ulong и тип позиции имеет тип ulong. И по значению они одинаковы. Следовательно, а какого июля изгаляться переводить типы в тип перечисления. Но вот хочется же… Читается приятней… А код, почти в полную страницу редактора не упрощает чтение.

Тикет, не тип. 
 
Artyom Trishkin #:
Тикет, не тип. 

Ну да, я не точно выразился. Имел ввиду тип переменной «тикет сделки» и тип переменной «тикет позиции»…

[Удален]  
Alexey Viktorov #:

Вот такой вопрос возник:  как поизящней имея тип сделки записать тип позиции?

Какие есть варианты, кроме тупого if else или тернарного оператора.

Если оба параметра - числа, то вычислить функцию зависимости между параметрами и записать формулу функции в одну строчку)

 
Aleksei Stepanenko #:

Если оба параметра - числа, то вычислить функцию зависимости между параметрами и записать формулу функции в одну строчку)

Да тут и вычислять нет необходимости, позиций только две

POSITION_TYPE_BUY

Покупка

POSITION_TYPE_SELL

Продажа


А сделок много, но первые две тоже самое

DEAL_TYPE_BUY

Покупка

DEAL_TYPE_SELL

Продажа


И ордеров тоже больше двух, но первые

ORDER_TYPE_BUY

Рыночный ордер на покупку

ORDER_TYPE_SELL

Рыночный ордер на продажу


А согласно справке именованные константы нумеруются от 0 и каждая следующая на 1 увеличивается.