Автоматическое закрытие ордера после заданного периода и/или SL - страница 2

 
Не волнуйся, ты привыкнешь к этому
 
nirvanamac:


Да, конечно, я понимаю... Я не хочу иметь рабов для своих советников... Единственное, что мне нужно знать, это как понять, каким образом работает программа...

Если у вас простой советник типа SMA Cross... это не является большой проблемой... но чем больше вы хотите достичь, тем сложнее это становится... (по крайней мере, для меня).


//-------------------------------------------------------------------+
//Check open orders
//-------------------------------------------------------------------+
if(OrdersTotal()>0){
  for(int i=1; i<=OrdersTotal(); i++)          // Cycle searching in orders
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // If the next is available
        {
          if(OrderMagicNumber()==BuyMagicNumber) {int halt1=1;}
          if(OrderMagicNumber()==SellMagicNumber) {int halt2=1;}
        }
     }
}

Похоже, что большая часть кода, который вы использовали, взята из этого https://www.mql5.com/en/code.

Что, по вашему мнению, делают вышеприведенные строки программы?

 
nirvanamac:
Я думаю, вы имеете в виду дырявый код или?
Повторяю
вы просто должны написать код. Где ваш OrderClose() и ваш тест на время?
nirvanamac:
Моя проблема в том, чтобы залить код в мой нынешний код...:
Здесь нет рабов, учитесь кодить или платите кому-то. Мы не собираемся кодировать его ЗА вас. Мы готовы помочь вам.
 

Привет вместе, я думаю, что я нашел правильный путь, но это все еще неправильно. Вообще-то код выглядит следующим образом:

//+------------------------------------------------------------------+
//|                                            Der Stundentrader.mq4 |
//|                                                         Der Marc |
//|                                  Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link      "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double    Lots=0.01;
extern int       Slippage=5;
extern int MagicNumber =1;
extern int  TradeHour3=3;
extern int  TradeHour4=4;
extern int  TradeHour7=7;
extern int  TradeHour10=10;
extern int  TradeHour17=17;
extern int  TradeHour18=18;
extern int  TradeHour20=20;
extern int  TradeHour12=12;
extern int  TradeHour23=23;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   UsePoint = PipPoint(Symbol());
   UseSlippage = GetSlippage(Symbol(), Slippage);
  }

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
// Buy criteria
OrderSelect(SellTicket || BuyTicket, SELECT_BY_TICKET);
       //Close Order
       if(OrderCloseTime() == 0 && SellTicket > 0 || BuyTicket > 0)
         {
          double CloseLots = OrderLots();
          double ClosePrice = Ask;
          bool Closed = OrderClose(SellTicket ,CloseLots, ClosePrice, UseSlippage, Red);
         }
         double OpenPrice = Ask;
//BuyOrder         
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20==Hour())) //Signal Buy
 {
   int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"time trader buy order ",MagicNumber,0,Blue);
    }
SellTicket = 0; 
BuyTicket = 0;
 
// Sell criteria
OrderSelect(BuyTicket || SellTicket, SELECT_BY_TICKET);
       //Close Order
      if(OrderCloseTime() == 0 && BuyTicket > 0 || BuyTicket > 0)
      {
       CloseLots = OrderLots();
       ClosePrice = Bid;
       Closed = OrderClose(BuyTicket, CloseLots, ClosePrice, UseSlippage, Red);
      }
               OpenPrice = Bid;
 //SellOrder
 if ((TradeHour12==Hour())||(TradeHour23==Hour())) //Signal Sell
 {
   int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"time trader sell order ",MagicNumber,0,Green);
    }  
SellTicket = 0;
BuyTicket = 0; 
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//Pip Point Function
  double PipPoint (string Currency)
  {
   int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
   if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
   else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
   return (CalcPoint);
  }

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
 {
  int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
  if(CalcDigits == 2 || CalcDigits == 3) double CalcSlippage = SlippagePips;
  else if(CalcDigits == 4 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
  return (CalcSlippage);
  }

У меня проблема в том, что мой советник закрывает все ордера после открытия. Как вы можете видеть, я заполнил OrderClosetime для всех Buy и SellTickets. Я не могу найти функцию, чтобы сказать советнику, что он должен быть закрыт через 1 час...

 
nirvanamac:


Да, конечно, я понимаю... Я не хочу иметь рабов для своих советников... Единственное, что мне нужно знать, это как понять, каким образом работает программа...

Если у вас простой советник, как SMA Cross... это не большая проблема... но чем больше вы хотите достичь, тем сложнее это становится... (по крайней мере для меня).

Мой текущий советник довольно прост... В нем более 2000 строк кода ... большая часть из них не имеет отношения к методу, а является домашним хозяйством и стандартными функциями, которые должны быть в любом советнике, который я когда-либо напишу. . такие как расчет размера позиции, размещение ордеров, подсчет ордеров, проверка закрытия ордеров при достижении ими TP или SL, отчет об ошибках и т.д. и т.п. ... Я потратил месяцы на написание, тестирование, модификацию, тестирование... моего кода.
 
RaptorUK:
Мой текущий советник довольно прост... В нем более 2000 строк кода ... большая часть из них не имеет отношения к методу, а является домашним хозяйством и стандартными функциями, которые должны быть в любом советнике, который я когда-либо напишу. . такие как расчет размера позиции, размещение ордеров, подсчет ордеров, проверка закрытия ордеров при достижении ими TP или SL, отчет об ошибках и т.д. и т.п. ... Я потратил месяцы на написание, тестирование, модификацию, тестирование... моего кода.


Вы загрузили его сюда?

 
nirvanamac:


Вы загрузили его сюда?

Нет, зачем мне это делать?
 
Мой код (без торговой логики) составляет более 1500 строк кода, и я загрузил его.
 

Привет всем,

после нескольких дней, проведенных за программированием и просмотром других советников, здесь вы можете увидеть текущий результат:

//+------------------------------------------------------------------+
//|                                            Der Stundentrader.mq4 |
//|                                                         Der Marc |
//|                                  Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link      "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double    Minlot=0.01;
extern int       Digits2Round=2;
extern int       PercentOfFreeDepo=1;
extern int       Slippage=5;
extern int       MagicNumber =1;
extern int       TradeHour3=3;
extern int       TradeHour4=4;
extern int       TradeHour7=7;
extern int       TradeHour10=10;
extern int       TradeHour17=17;
extern int       TradeHour18=18;
extern int       TradeHour20=20;
extern int       TradeHour12=12;
extern int       TradeHour23=23;
extern int       StopLoss=40;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   UsePoint = PipPoint(Symbol());
   UseSlippage = GetSlippage(Symbol(), Slippage);
  }

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
   double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
   double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== Lets determine lot size and risk ===================================
if ( Lot<Minlot )
 {
   Lot=Minlot;
 }
Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);
// Buy criteria
OrderSelect(SellTicket || BuyTicket, SELECT_BY_TICKET);
       //Close Order
       if((OrderOpenTime()+3600) > TimeCurrent() && SellTicket > 0 || BuyTicket > 0)
         {
          double CloseLots = OrderLots();
          double ClosePrice = Ask;
          bool Closed = OrderClose(SellTicket ,CloseLots, ClosePrice, UseSlippage, Red);
         }
         double OpenPrice = Ask;
//BuyOrder         
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20==Hour())) //Signal Buy
 {
   int openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,StopLoss,0,"time trader buy order ",MagicNumber,0,Blue);
    }
SellTicket = 0; 
BuyTicket = 0;
 // Sell criteria
OrderSelect(BuyTicket || SellTicket, SELECT_BY_TICKET);
       //Close Order
      if((OrderOpenTime()+3600) > TimeCurrent() && SellTicket > 0 || BuyTicket > 0)
      {
       CloseLots = OrderLots();
       ClosePrice = Bid;
       Closed = OrderClose(BuyTicket, CloseLots, ClosePrice, UseSlippage, Red);
      }
               OpenPrice = Bid;
 //SellOrder
 if ((TradeHour12==Hour())||(TradeHour23==Hour())) //Signal Sell
 {
   int opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,StopLoss,0,"time trader sell order ",MagicNumber,0,Green);
    }  
SellTicket = 0;
BuyTicket = 0; 
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//Pip Point Function
  double PipPoint (string Currency)
  {
   int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
   if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
   else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
   return (CalcPoint);
  }

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
 {
  int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
  if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
  else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
  return (CalcSlippage);
  }

Теперь у меня есть проблема, что во время есть больше ордеров открыты, чем 1. Я также получаю сообщение об ошибке "130" ...

 

Причина обращения: