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

[Удален]  
Marco Nicholas комментарий в void OnTick() замедлять работу советника. Поместил его в int OnInit() работает намного быстрее.

Вы говорите о функции Comment()?

Если да, то это очевидно. В OnInit() комментарий будет обновляться только один раз, а в OnTick() комментарий может обновляться при каждом тике.

Решение состоит в том, чтобы обновлять комментарий только тогда, когда это необходимо. Если он статический, то обновлять его только в OnInit() и очищать в OnDeinit(), а если динамический, то в OnTick() обновлять комментарий только тогда, когда его нужно изменить.

EDIT: Это сообщение было первоначально сделано на английском форуме.

 
Здравствуйте преподаватели, когда я использую функцию SocketConnect() на стороне клиента , я не могу установить соединение с сервером даже после правильного заполнения параметров в соответствии с инструкцией пользователя, но после тестирования сервер нормально доступен.
 

 всем доброго времени суток.

у меня вопрос

как составить запрос к sqlite что выбрать строку по тикету.

структура бд такая:

symbol-text

ticket - text

pirce- real

s_l - real

t_p - real

нужно получить всю строку по ticket в структуру

 
Здравствуйте, подскажите в switch() можно Comment() использовать, вместо того же Print.
 
Marco Nicholas #:
Здравствуйте, подскажите в switch() можно Comment() использовать, вместо того же Print.

А самому попробовать, неужели так сложно?

 
Vitaly Muzichenko #:

А самому попробовать, неужели так сложно?

Попробовал, работает.

Из-за внутренней справки по F1 о "switch" и возник такой вопрос, т.к. там указан только Print. И ранее было замечено, что  Comment()  в void OnTick() сильно замедляет выполнение кода.  

 
Я купил индикатор, но когда я его устанавливаю, у меня появляется диалоговое окно MQL5 community и он говорит мне, что мой логин и пароль не действительны, но тем не менее я ввожу учетные данные, отправленные на мой email, я уже сменил пароль, но ничего, я зарегистрирован.
 
Может ли кто-нибудь помочь мне, как я могу это сделать?
 
kduarte #:
Может ли кто-нибудь помочь мне, как я могу это сделать?

Убедитесь, что вы используете свой логин kduarte и что пароль вашей учетной записи MQL5 не превышает 10 символов.

 
Vladimir Karputov #:

Вы никак не контролируете ОРДЕРЫ, вы проверяете номер и тип ПОЗИЦИИ в коде. Кроме того - вы некорректно работаете с ПОЗИЦИЯМИ (ошибка в использовании 'PositionSelect(_Symbol)', если тип вашего счета - хеджирование). В вашем алгоритме есть серьезные ошибки проектирования.

Что вы должны сделать:

1. Работать ИСКЛЮЧИТЕЛЬНО в момент рождения нового бара. Если нового бара нет - ничего не делайте, не совершайте лишних движений.

2. Этот пункт будет раскрыт после выполнения пункта 1.

Здравствуйте Владимир,

Еще раз огромное спасибо за подсказки. Мне понадобилось некоторое время, чтобы во всем разобраться.

Что я изменил, основываясь на ваших подсказках:

- Изменил логику открытия и закрытия на хеджирующую версию.

- Теперь я работаю с рождением нового бара для некоторых расчетов/размещения ордеров.


После применения этих изменений ордера теперь открываются и закрываются только один раз. Но теперь у меня возникла проблема с бэктестингом. Я получаю ошибку, что массив в строке 121 находится вне диапазона. Не могли бы вы указать мне правильное направление? Я пробовал использовать массив типа double для цен закрытия и copyClose, но все равно получаю ошибку.

Также рад за пункт 2 :)


Код на данный момент:

Желтым цветом я выделил строку 121.

void OnTick()

{ 
        MqlTradeRequest request;
        MqlTradeResult Result;
        ZeroMemory(request);
        
//Setting newBar event handler
bool newBar = true;
int barShift =0;

newBar = NewBar.CheckNewBar(_Symbol,_Period);
barShift = 1;
        
// Get current market orders
        ulong buyTicket = 0, sellTicket = 0;
        for(int i = 0; i < PositionsTotal(); i++)
        {
           ulong ticket = PositionGetTicket(i);
           PositionSelectByTicket(ticket);
           
           if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
           {
              buyTicket = ticket;
              Buy_openend = true;
           }
           else if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
           {
              sellTicket = ticket;
              Sell_openend = true;
           }
        }
   



if(newBar == true)
  {
      double closingprice[];
      datetime date_time[];
      MqlRates bar[];
      ArraySetAsSeries(bar,true);
      ArrayResize(bar,80);
      CopyRates(_Symbol,_Period,0,56,bar);
      
      
      double close = bar[1].close;
      datetime time = bar[1].time;

datetime startTime = CreateDateTime(OpentimeHH,OpentimeMM);
datetime endTime = CreateDateTime(EndtimeHH,EndtimeMM);

if(OpentimeHH <= EndtimeHH)
          {
          endTime -= TIME_ADD_DAY;
          }
      
Comment(close,time, "start time:", startTime, "endtime:", endTime);

int bar_index = iBarShift(_Symbol, PERIOD_CURRENT, endTime,true);
double closeprev = bar[bar_index].close; //line 121


// Check for trade conditions
bool BuyCondition = (close >= closeprev) && (bar[1].time == startTime) && (Buy_openend == false);
bool SellCondition = (close <= closeprev) && (bar[1].time == startTime) && (Sell_openend == false);


// Open Market buy order
if(BuyCondition)
  {
   //Close Posible Sell Order
   if(sellTicket > 0)
     {
      PositionSelectByTicket(sellTicket);
      request.action = TRADE_ACTION_DEAL;
      request.type   = ORDER_TYPE_BUY;
      request.symbol = _Symbol;
      request.position = sellTicket;
      request.volume = PositionGetDouble(POSITION_VOLUME);
      request.price = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      request.type_filling = ORDER_FILLING_IOC;
      request.deviation = 50;
      
      bool sent = OrderSend(request,Result);
     }
     
     request.action = TRADE_ACTION_DEAL;
                request.type = ORDER_TYPE_BUY;
                request.symbol = _Symbol;
                request.position = 0;
                request.volume = TradeVolume;
                request.price = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
                request.type_filling = ORDER_FILLING_IOC;
                request.sl = 0;
                request.tp = 0;
                request.deviation = 50;
                
                bool sent = OrderSend(request,Result);
  }

//Open Market Sell Order
if(SellCondition)
  {
     //Close posible buy orders
     if(buyTicket > 0)
       {
      PositionSelectByTicket(buyTicket);
      request.action = TRADE_ACTION_DEAL;
      request.type   = ORDER_TYPE_SELL;
      request.symbol = _Symbol;
      request.position = buyTicket;
      request.volume = PositionGetDouble(POSITION_VOLUME);
      request.price = SymbolInfoDouble(_Symbol,SYMBOL_BID);
      request.type_filling = ORDER_FILLING_IOC;
      request.deviation = 50;
      
      bool sent = OrderSend(request,Result);
     }
  request.action = TRADE_ACTION_DEAL;
                request.type = ORDER_TYPE_SELL;
                request.symbol = _Symbol;
                request.position = 0;
                request.volume = TradeVolume;
                request.price = SymbolInfoDouble(_Symbol,SYMBOL_BID);
                request.type_filling = ORDER_FILLING_IOC;
                request.sl = 0;
                request.tp = 0;
                request.deviation = 50;
                
                bool sent = OrderSend(request,Result);
  }
}
  }