Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1809

 
Alekseu Fedotov #:

Nein, das ist nicht richtig.


Bei OrderModify ist das eher der Fall.

Und besser als separater Block.

Gut, danke!

 
Alexander Avksentyev #:

Alles, was es gibt. Ich danke Ihnen für Ihre Hilfe.

#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 #:

Dankeschön

 
MakarFX #:

Nur fing er an, sowohl den Kauf als auch den Verkauf auf einmal zu eröffnen. Ich nahm an, dass

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);
  }

Dieser Teil prüft, ob es eine offene Position bei magic und

if (CountTrades() == 0)
      {

Dieses Teil lässt sich nicht in beide Richtungen öffnen.

 
Alexander Avksentyev #:

Nur fing er an, sowohl den Kauf als auch den Verkauf auf einmal zu eröffnen. Ich nahm an, dass

Dieser Teil prüft, ob es eine offene Position bei magic und

Dieses Teil lässt sich nicht in beide Richtungen öffnen.

Unwahrscheinlich, zeigen Sie mir das Protokoll oder schreiben Sie, wann, bei welchem Paar und in welchem Zeitrahmen, damit ich das überprüfen kann.


Das ist es.

Dieser Teil kann nicht geöffnet werden, wenn es bereits offene Aufträge gibt.

 
MakarFX #:

Unwahrscheinlich, zeigen Sie das Protokoll oder schreiben Sie, wann, bei welchem Paar und zu welcher Zeit, damit ich es überprüfen kann.


Das ist es.

Dieser Teil lässt Sie nicht öffnen, wenn es bereits offene Aufträge gibt.

Es tut mir leid.

Ich habe diese Regeln bereits aufgestellt, und es hat sich gezeigt, dass der Auftrag bei jeder Kerze in Richtung des vorherigen Schlusskurses eröffnet wird.

Mein Fehler.

 
MakarFX #:

Unwahrscheinlich, zeigen Sie das Protokoll oder schreiben Sie, wann, bei welchem Paar und zu welcher Zeit, damit ich es überprüfen kann.


Das ist es.

Dieser Teil lässt sich nicht öffnen, wenn es bereits offene Aufträge gibt.

Ich habe 10 verschiedene Editoren, ich ändere überall etwas, ich bin verwirrt.

 
MakarFX #:

Unwahrscheinlich, zeigen Sie das Protokoll oder schreiben Sie, wann, bei welchem Paar und zu welcher Zeit, damit ich es überprüfen kann.


Das ist es.

Dieser Teil lässt sich nicht öffnen, wenn es bereits offene Aufträge gibt.

Eine andere Frage.

Wie ernst sollten wir die Warnungen nehmen?

 
Alexander Avksentyev #:

Eine andere Frage.

Wie ernst sollten Sie die Warnungen nehmen?

Immer. Viele Warnungen sind auf Unachtsamkeit zurückzuführen.
 
MakarFX #:

Überprüfen Sie die Größe Ihres Terminals


P.S. es ist nicht eine Tatsache, dass Ihre "32-Bit-Bibliothek" auf 64 vin arbeiten kann.

Dafür gibt es eine Einstellung in Visual Studio

Wenn Sie eine Konsolenanwendung erstellen, wählen Sie die 32er-Version des Programms aus und es wird ausgeführt. Der Zeiger ist in diesem Fall 4 Byte groß.