新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1809

 
Alekseu Fedotov #:

不,这是不对的。


有了OrderModify,这就更正确了。

而且最好是作为一个单独的区块。

好的,谢谢你!

 
Alexander Avksentyev #:

所有的都有。谢谢你的帮助。

#property strict
//--- input parameters
input int      Magic            =12345;
input int      iTakeProfit      =10;
input int      iTrailStart      =10;
input int      iTrailDist       =10;
input int      iTrailStep       =10;
input int      iTrailTakeProfit =10;
input int      iStep            =10;
input int      iSlippage        =5;
input double   Lot              =0.01;

int      Login = 4950287;
datetime time  = D'2022.01.01 00:00:00';
string   name  = "AutoP_v.3.0";
datetime time1 = 0;
double   price, TP, lastlot, minlot;
int      Forder;
int      TakeProfit,TrailStart,TrailDist,TrailStep,TrailTakeProfit,Step,Slippage;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
     if(AccountNumber() != Login)
       {
        int close = MessageBox("Неверный номер счёта","Ошибка",MB_OK|MB_ICONSTOP);
        return(INIT_FAILED);
       }else (AccountNumber() == Login);
             {
              int close = MessageBox("Проверка прошла успешно.Экcперт может приступить к работе.","Инициализация",MB_OK|MB_ICONEXCLAMATION);
             }
 //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//  
     if (TimeCurrent() > time)
        {
         int close = MessageBox("Время работы закончилось!!!","Время работы",MB_OK|MB_ICONSTOP);
         return(INIT_FAILED);
        }else(TimeCurrent() < time);
             {
              int close = MessageBox("Проверка времени работы прошла успешно.Эксперт может приступить к работе!","Время работы",MB_OK|MB_ICONEXCLAMATION);
             }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
      TakeProfit     =iTakeProfit;
      TrailStart     =iTrailStart;
      TrailDist      =iTrailDist;
      TrailStep      =iTrailStep;
      TrailTakeProfit=iTrailTakeProfit;
      Step           =iStep;
      Slippage       =iSlippage;
     if(Digits == 3 || Digits == 5)
       {
        TakeProfit      *=10;
        TrailStart      *=10;
        TrailDist       *=10;
        TrailStep       *=10;
        TrailTakeProfit *=10;
        Step            *=10;
        Slippage        *=10;
       }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if (CountTrades() == 0)
      {
      double body = Close[1] - Open[1];
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Buy
      if (body > 0)
         {
         Forder = (OrderSend(_Symbol,OP_BUY,Lot,Ask,Slippage,0,0,"Коммент",Magic,0,Blue));
         if(Forder > 0)
           {
            Print("Открыта Позиция BUY");
            if(OrderSelect(Forder, SELECT_BY_TICKET))
               {
               TP = NormalizeDouble((Ask+TakeProfit*_Point),_Digits);
               if (OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0))
                  Print("Ордер Модифицирован BUY "); 
               else 
                  Print("Ошибка Модификации Ордера BUY = ",GetLastError());
               }
           }
         else
            Print("Ошибка Открытия Позиции BUY");
       }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Sell      
      if (body < 0)
         {
         Forder = (OrderSend(_Symbol,OP_SELL,Lot,Bid,Slippage,0,0,"Коммент Sell",Magic,0,Red));
         if (Forder > 0)
            {
            Print("Открыта Позиция SELL");
            if(OrderSelect(Forder, SELECT_BY_TICKET))
               {
               TP = NormalizeDouble((Bid-TakeProfit*_Point),_Digits);
               if (OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0))
                  Print("Ордер Модифицирован SELL "); 
               else 
                  Print("Ошибка Модификации Ордера SELL = ",GetLastError());
               }
            }
         else
            Print("Ошибка Открытия Позиции BUY");
        }
      }
//---
  }
//+------------------------------------------------------------------+
//| Подсчет открытых ордеров                                         |
//+------------------------------------------------------------------+
int CountTrades() 
  {
   int count =0;
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderMagicNumber()==Magic) count ++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
 
MakarFX #:

谢谢你

 
MakarFX #:

只有他开始同时开买和卖。我以为

int CountTrades() 
  {
   int count =0;
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderMagicNumber()==Magic) count ++;
           }
        }
     }
   return(count);
  }

这一部分将检查魔法的一个开放位置和

if (CountTrades() == 0)
      {

这个部分不允许双向打开。

 
Alexander Avksentyev #:

只有他开始同时开买和卖。我以为

这一部分将检查魔法的一个开放位置和

这个部分不允许双向打开。

不太可能,请显示日志或写出时间,在哪个对子上,什么时间段,这样我就可以检查。


它是。

如果已经有开放的订单,这部分将不允许打开。

 
MakarFX #:

不太可能,请显示日志或写出时间,在哪一对上,什么时间,这样我就可以检查。


它是。

如果有已开的订单,这部分不会让你打开。

我很抱歉。

我已经制定了这些规则,事实证明,订单在每根蜡烛上打开,方向是前一根蜡烛的收盘。

我的错误。

 
MakarFX #:

不太可能,请显示日志或写出时间,在哪一对上,什么时间,这样我就可以检查。


它是。

如果已经有开放的订单,这部分不允许打开。

我有10个不同的编辑,我到处改东西,我很困惑。

 
MakarFX #:

不太可能,请显示日志或写出时间,在哪一对上,什么时间,这样我就可以检查。


它是。

如果已经有开放的订单,这部分不允许打开。

另一个问题。

我们应该多认真地关注这些警告?

 
Alexander Avksentyev #:

另一个问题。

你应该多认真地注意这些警告?

总是这样。许多警告是由于不注意造成的。
 
MakarFX #:

检查你的终端的尺寸


P.S. 你的 "32位库 "可以在64乙烯基上工作,这不是事实。

在Visual Studio中有这样的设置

是的,那里有一个设置,当你创建一个控制台应用程序时,你选择32版本的程序,它就会运行。本例中的指针是4个字节。

原因: