Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1809

 
Alekseu Fedotov #:

No, non è giusto.


Con OrderModify è più corretto.

E meglio come blocco separato.

Ok, grazie!

 
Alexander Avksentyev #:

Tutto quello che c'è. Grazie per il vostro aiuto.

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

Grazie

 
MakarFX #:

Solo che ha iniziato ad aprire sia a comprare che a vendere contemporaneamente. Ho pensato che

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

Questa parte verificherebbe la presenza di una posizione aperta sulla magia e

if (CountTrades() == 0)
      {

Questa parte non permetterà di aprirsi in entrambe le direzioni.

 
Alexander Avksentyev #:

Solo che ha iniziato ad aprire sia a comprare che a vendere contemporaneamente. Ho pensato che

Questa parte verificherebbe la presenza di una posizione aperta sulla magia e

Questa parte non permette di aprirsi in entrambe le direzioni.

Improbabile, mostra il log o scrivi quando, su quale coppia e in quale lasso di tempo, così posso controllare.


Lo è.

Questa parte non permetterà di aprire se ci sono già ordini aperti.

 
MakarFX #:

Improbabile, mostra il log o scrivi quando, su quale coppia e a che ora, così posso controllare.


Lo è.

Questa parte non ti permette di aprire se ci sono già ordini aperti.

Mi dispiace.

Ho già fatto queste regole, ed è risultato che si apre su ogni candela, nella direzione della chiusura della precedente.

Errore mio.

 
MakarFX #:

Improbabile, mostra il log o scrivi quando, su quale coppia e a che ora, così posso controllare.


Lo è.

Questa parte non permette di aprire se ci sono già ordini aperti.

Ho 10 editor diversi, cambio qualcosa ovunque, sono confuso.

 
MakarFX #:

Improbabile, mostra il log o scrivi quando, su quale coppia e a che ora, così posso controllare.


Lo è.

Questa parte non permette di aprire se ci sono già ordini aperti.

Un'altra domanda.

Quanto seriamente dovremmo prestare attenzione agli avvertimenti?

 
Alexander Avksentyev #:

Un'altra domanda.

Quanto seriamente si dovrebbe prestare attenzione agli avvertimenti?

Sempre. Molti avvertimenti sono dovuti a disattenzione.
 
MakarFX #:

Controlla la dimensione del tuo terminale


P.S. non è un fatto che la vostra "libreria a 32 bit" possa funzionare su 64 vin.

C'è un'impostazione per questo in Visual Studio

Sì, c'è un'impostazione lì, quando si crea un'applicazione console si seleziona la versione 32 del programma e verrà eseguita. Il puntatore in questo caso è di 4 byte.