Подскажите как ограничить число ордеров у советника

 

Привет!!! Сейчас советник открывает сделки на каждом баре если выполнено условие. Написал функцию со счетчиком, но не могу этот счетчик привязать к количеству ордеров! Подскажите плиз!!

//+------------------------------------------------------------------+
//|                                             MA_SELL_Strategy.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Trade/AccountInfo.mqh>
CAccountInfo aInfo;
#include <Trade/PositionInfo.mqh>
CPositionInfo pInfo;
#include <Trade/Trade.mqh>
CTrade trade;
//--- input parameters
input int maPeriod=12;
input ENUM_APPLIED_PRICE maPrice = PRICE_CLOSE;
input ENUM_MA_METHOD maMethod = MODE_EMA;
input double lot = 0.1;
input int maxPos = 5;
int count=5;
//------------MA variables-----------
ulong magicNum = 555;
int maHandle=INVALID_HANDLE;
double maBuffer[];
MqlRates mqlRates[];//хранит данные о баре
MqlTick mqlTick[]; //хранит данные о цене
double priceClose;
//-----------MA Time-----------------
datetime firstTime;
datetime curTime[];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() {
   maHandle=iMA(_Symbol, _Period, maPeriod, 0, maMethod, maPrice);
   if(maHandle == INVALID_HANDLE) {
      Print("Ошибка загрузки индикатора МА ошибка ", GetLastError());
      return(INIT_FAILED);
   }
   trade.SetExpertMagicNumber(magicNum);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
   IndicatorRelease(maHandle);
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() {
   ArraySetAsSeries(maBuffer, true);
   ArraySetAsSeries(mqlRates, true);
   ArraySetAsSeries(mqlTick, true);

   if(CopyTime(_Symbol, _Period, 0, 1, curTime)==-1) {
      Print("Ошибка копирования данных о времени. Ошибка ", GetLastError());
      return;
   }
   if(CopyRates(_Symbol, _Period, 0, 3, mqlRates)==-1) {
      Print("Ошибка копирования исторических данных. Ошибка ", GetLastError());
      return;
   }
   if(CopyBuffer(maHandle, 0, 0, 3, maBuffer)==-1) {
      Print("Ошибка копирования данных MA. Ошибка ", GetLastError());
      return;
   }
   if(curTime[0]!=firstTime) {
      priceClose = mqlRates[1].close;
      if(!openSellPosition()) {
         return;
      }
      if(checkPositionCount(count)==-1) {
         return;
      }
      firstTime=curTime[0];
   }

}
//+------------------------------------------------------------------
bool openSellPosition() {
   if(maBuffer[0]<maBuffer[1] && maBuffer[1]<maBuffer[2]) {
      if(priceClose<maBuffer[1]) {
         trade.Sell(lot);
      }
   }
   return(true);
}
//+------------------------------------------------------------------+
int getPositions() {
   return(PositionsTotal());
}
//--------------------------------------------------------------------
int checkPositionCount(int cnt) {
   cnt=PositionsTotal();
   while(cnt<5) {
      cnt++;
      Print("count", cnt);
   }
   return(cnt);
}
//+------------------------------------------------------------------+
 
kirillyurkov:

Привет!!! Сейчас советник открывает сделки на каждом баре если выполнено условие. Написал функцию со счетчиком, но не могу этот счетчик привязать к количеству ордеров! Подскажите плиз!!

Привет! Так у Вас функция для подсчета позиций, а не отложенных ордеров. Вам что нужно считать - позиции или отложенные ордера? В Вашем коде вообще ни чего про ордера не нахожу.

С уважением, Владимир.

 
MrBrooklin #:

Привет! Так у Вас функция для подсчета позиций, а не отложенных ордеров. Вам что нужно считать - позиции или отложенные ордера? В Вашем коде вообще ни чего про ордера не нахожу.

С уважением, Владимир.

Привет!! А у меня нет отложенных ордеров. Только рыночные. Поэтому использую PositionsTotal(). Ток не особо помогает))
 
MrBrooklin #:

Привет! Так у Вас функция для подсчета позиций, а не отложенных ордеров. Вам что нужно считать - позиции или отложенные ордера? В Вашем коде вообще ни чего про ордера не нахожу.

С уважением, Владимир.

КАк мне кажется моя функция со счетчиком должна отработать в этом участке кода


   if(curTime[0]!=firstTime) {

      priceClose = mqlRates[1].close;

      if(!openSellPosition()) {

         return;

      }

      if(checkPositionCount(count)==-1) {

         return;

      }

      firstTime=curTime[0];

   }


}


//+------------------------------------------------------------------+


Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2022.11.07
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
Причина обращения: