Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1294

 
Vladimir Pastushak:
Как программно понять тип счета? Хедж или неттинг?
   if(m_account.MarginMode()!=ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)
     {
      Alert("Only Hedging!");
      return(INIT_FAILED);
     }
 

Или вот так 

AccountInfoSample

   m_label_info[3].Description(m_account.MarginModeDescription());

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

//+------------------------------------------------------------------+
//|                                        MarginModeDescription.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Trade\AccountInfo.mqh>
CAccountInfo      m_account;     // account info wrapper
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string Pr= m_account.MarginModeDescription();
   Alert(Pr);
  }
//+------------------------------------------------------------------+
 
Помогите найти советника(скрипт) который либо ставит сетку виртуальных отложек с заданными параметрами, либо открывает ордера (по очереди) в заданном мной направлении с заданным тейком.
 

Подскажите пожалуйста где кроется ошибка:

      for(int s=OrdersTotal()-1; s>=0; s--)          
         {
           if(o_orderInfo.SelectByIndex(s)) 
           if(o_orderInfo.OrderType()==ORDER_TYPE_SELL_STOP)
             {                 
               count_sell_stop++;
             }
         }  

      for(int s1=PositionsTotal()-1; s1>=0; s1--)          
         {
           if(o_orderInfo.SelectByIndex(s1)) 
           if(o_orderInfo.OrderType()==ORDER_TYPE_SELL)
             {                 
               count_sell++;
             }
         }  
         
      if(count_sell == 0 && count_sell_stop == 0)
         {
            sellstop_req3.action       = TRADE_ACTION_PENDING;
            sellstop_req3.symbol       = _Symbol;
            sellstop_req3.volume       = NormalizeDouble(lot_v, 2);
            sellstop_req3.price        = SymbolInfoDouble(sellstop_req3.symbol, SYMBOL_ASK) - 100*_Point;
            sellstop_req3.sl           = sellstop_req3.price + 110*_Point;
            sellstop_req3.type         = ORDER_TYPE_SELL_STOP;
            sellstop_req3.type_filling = ORDER_FILLING_RETURN;
            sellstop_req3.expiration   = ORDER_TIME_GTC;
            
            OrderSend(sellstop_req3, sellstop_res3);
         }
SELL_STOP - ордера подсчитывааются, а SELL никак не хотят.. По алгоритму - если их нет выставляется ордер SELL_STOP, а если присутствует хотя бы какой-нибудь из них - ордер не выставляется.
 
Fergert Фергерт:

Подскажите пожалуйста где кроется ошибка:

SELL_STOP - ордера подсчитывааются, а SELL никак не хотят.. По алгоритму - если их нет выставляется ордер SELL_STOP, а если присутствует хотя бы какой-нибудь из них - ордер не выставляется.

Не путайте ОТЛОЖЕННЫЙ ОРДЕР и ПОЗИЦИЮ.

//+------------------------------------------------------------------+
//|                                                     Script 1.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\OrderInfo.mqh>
//---
CPositionInfo  m_position;                   // object of CPositionInfo class
COrderInfo     m_order;                      // object of COrderInfo class
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int count_buys          = 0.0;
   int count_sells         = 0.0;
   int count_buy_limits    = 0.0;
   int count_sell_limits   = 0.0;
   int count_buy_stops     = 0.0;
   int count_sell_stops    = 0.0;
//---
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
        {
         if(m_position.PositionType()==POSITION_TYPE_BUY)
            count_buys++;
         else
            if(m_position.PositionType()==POSITION_TYPE_SELL)
               count_sells++;
        }
//---
   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i)) // selects the pending order by index for further access to its properties
        {
         if(m_order.OrderType()==ORDER_TYPE_BUY_LIMIT)
            count_buy_limits++;
         else
            if(m_order.OrderType()==ORDER_TYPE_SELL_LIMIT)
               count_sell_limits++;
            else
               if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
                  count_buy_stops++;
               else
                  if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
                     count_sell_stops++;
        }
//--- you code
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
Файлы:
Script_1.mq5  5 kb
 
Vladimir Karputov:

Не путайте ОТЛОЖЕННЫЙ ОРДЕР и ПОЗИЦИЮ.

СПАСИБО)) Понял...
 
Не понимаю, за что отвечает параметр begin во втором варианте функции onCalculate.
При каждом вызове функции onCalculate он равен 0.
Делал вывод значения begin через функцию print.
В справочнике написано, что begin - "откуда начинаются значимые данные". Это мне ни о чём не говорит.
 
MisterRight:
Не понимаю, за что отвечает параметр begin во втором варианте функции onCalculate.
При каждом вызове функции onCalculate он равен 0.
Делал вывод значения begin через функцию print.
В справочнике написано, что begin - "откуда начинаются значимые данные". Это мне ни о чём не говорит.

Посмотрите открытые коды индикаторов из Example.

 
Mikhail Mishanin:

Посмотрите открытые коды индикаторов из Example.

Я смотрел. Всегда begin = 0.

Вот, выдернул кусок кода из индикатора AMA

if(begin!=0)

      PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ExtPeriodAMA+begin);


И что мне этот код должен сказать, если условие  begin!=0 никогда не будет истиным?

 
Подскажите, чем пользоваться, чтобы посчитать закрытые ордера в истории. Пробовал так:

HistorySelect(0,TimeCurrent());

Alert("Количество ордеров в истории:  ",HistoryOrdersTotal());
Какую-то ерунду в итоге выдает, намного больше, чем закрытых ордеров.
Причина обращения: