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

 

А корректно подойдет вот такая сокращенная конструкция в коде: a < b  && ( c > d1 || c >d2 || c > d3) ?

Это чтоб не писать: (a < b  && c > d1)  || (a < b  && c > d2) и т.д. много раз.


 

 
HeAic:

А корректно подойдет вот такая сокращенная конструкция в коде: a < b  && ( c > d1 || c >d2 || c > d3) ?

Это чтоб не писать: (a < b  && c > d1)  || (a < b  && c > d2) и т.д. много раз.

Конечно подойдет. Единственное, что бы я делал при написании подобных больших конструкций, это явно указал приоритеты скобками:

(a < b)  && ( c > d1 || c >d2 || c > d3)

Для компиляторов MT4/5 можно и без указанных скобок, т. к. существующие приоритеты не позволят рассчитать результат выражения по-другому. Но такие вот скобки дают два преимущества:

  1. Выражение легче воспринимается визуально без вопросов о приоритетах (не помнить же приоритеты для каждого компилятора).
  2. В случае переноса кода в другой компилятор, у которого возможно будут другие приоритеты, код будет работать так же, как и в текущем компиляторе.
 
Alexey Viktorov:

Спасибо, если 

S_sk= SymbolInfoInteger("EURUSD",SYMBOL_SELECT);

вернула фалсе, нет символа в Market Watch, как его туда добавить?

 
lil_lil:

Спасибо, если 

вернула фалсе, нет символа в Market Watch, как его туда добавить?

SymbolSelect()

Всё есть в справке. Курсор на название функции и F1

 
Artyom Trishkin:

SymbolSelect()

Всё есть в справке. Курсор на название функции и F1

Спасибо.

 

 Подскажите в чем причина? Написал скрипт который устанавливает лимитные ордера в МТ5. Когда скидываю на график в терминале ордера не устанавливаются, хотя result.retcode возвращает 10009 (заявка выполнена)

 
iv1986:

 Подскажите в чем причина? Написал скрипт который устанавливает лимитные ордера в МТ5. Когда скидываю на график в терминале ордера не устанавливаются, хотя result.retcode возвращает 10009 (заявка выполнена)

  1. Код.
  2. Журнал.
  3. Стейтмент.
Где все это?

 
Ihor Herasko:

  1. Код.
  2. Журнал.
  3. Стейтмент.
Где все это?

{MqlTradeRequest request={0};
  MqlTradeResult  result={0};
 double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
 double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
 int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);  
 double p=NormalizeDouble(ChartPriceOnDropped(),digits); 
 if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
 {p=MathRound(ChartPriceOnDropped()*0.1)/0.1;
 } 
 int V=75;
           if (p<Ask)
            {
             request.action   =TRADE_ACTION_PENDING;                     // тип торговой операции
             request.symbol   =Symbol();                              // символ
             request.volume   =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
             SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));  
             if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 
             { request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
             }                             
             request.type     =ORDER_TYPE_BUY_LIMIT;                        // тип ордера
             request.price    =NormalizeDouble(Ask-SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits);     // цена для открытия
             request.deviation=50;                                     // допустимое отклонение от цены
             request.sl      =p;                                      // Stop Loss позиции
             request.tp      =NormalizeDouble(Ask+(Ask-p)*3,digits);    // Take Profit позиции
             request.type_filling=ORDER_FILLING_IOC;
             request.type_time=ORDER_TIME_DAY;
             request.stoplimit=Ask;
             OrderSend(request,result);
            }
         if (p>Bid)
            {
             request.action   =TRADE_ACTION_PENDING;                     // тип торговой операции
             request.symbol   =Symbol();                              // символ
             request.volume   =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((p-Bid)/
             SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE))); 
             if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 
             { request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
             }                                      // объем 
             request.type     =ORDER_TYPE_SELL_LIMIT;                        // тип ордера
             request.price    =NormalizeDouble(Bid+SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits);      // цена для открытия
             request.deviation=50;                                     // допустимое отклонение от цены
             request.sl      =p;                                      // Stop Loss позиции
             request.tp      =NormalizeDouble(Bid-(p-Bid)*3,digits); // Take Profit позиции
             request.type_time=ORDER_TIME_DAY;
             request.type_filling=ORDER_FILLING_IOC;
             request.stoplimit=Bid;
             OrderSend(request,result);

            }  

в журнале пишет: 2018.05.14 10:12:38.187 Trades '992940': sell limit 3.00 Si-6.18 at 62066 (62065) sl: 62331 tp: 61267 placed for execution

 
iv1986:

в журнале пишет: 2018.05.14 10:12:38.187 Trades '992940': sell limit 3.00 Si-6.18 at 62066 (62065) sl: 62331 tp: 61267 placed for execution

Это пишется в общем журнале. А что в журнале "Эксперты"? И не одна строка, а весь журнал. Через замочную скважину мало, что видно.

Кроме того, в приведенном коде нет проверки кодов возврата. Поэтому не понятно, на каком основании сделан вывод о коде ошибки.

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

P. S. Для вставки кода, пожалуйста, используйте пиктограмму "</>" или Alt+S.

 

В конце кода еще  Alert(result.retcode);      

в общем журнале:

2018.05.14 12:08:16.984 Scripts script ЛИМИТ (Si-6.18,M15) loaded successfully

2018.05.14 12:08:17.187 Trades '992940': buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.484 Trades '992940': accepted buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.500 Trades '992940': buy limit 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905 placed for execution

2018.05.14 12:08:17.546 Trades '992940': order #13235300 buy limit 3.00 / 3.00 Si-6.18 at 62091 done in 337.532 ms

2018.05.14 12:08:17.578 Scripts script ЛИМИТ (Si-6.18,M15) removed


В графе Эксперты: 2018.05.14 12:08:17.578 ЛИМИТ (Si-6.18,M15) Alert: 10009, больше ничего нет