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

 

Buon pomeriggio. Sto imparando a scrivere codice e ho un problema. Il codice nel tester viene eseguito, apre un trade e questo è tutto. Il prezzo non cambia, tutto si ferma sul posto.

Chi non è difficile, si prega di consigliare.

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));
        {
         Print("Открыта Позиция BUY");
              {
               if(Forder > 0)
                 {
                  TP = NormalizeDouble((Ask+TakeProfit*_Point+OrderSwap()+OrderCommission()),_Digits);
                  Forder = OrderModify(Forder,OrderOpenPrice(),0,TP,0);
                 }Print("Ордер Модифицирован BUY ");
              }Print("Ошибка Модификации Ордера BUY");
        }
       }Print("Ошибка Открытия Позиции BUY");
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Sell      
    if (body < 0)
       {
        Forder = (OrderSend(_Symbol,OP_SELL,Lot,Bid,Slippage,0,0,"Коммент Sell",Magic,0,Red));
        {
         Print("Открыта Позиция SELL");
              {
               if(Forder > 0)
                 {
                  TP = NormalizeDouble((Bid-TakeProfit*_Point+OrderSwap()+OrderCommission()),_Digits);
                  Forder = OrderModify(Forder,OrderOpenPrice(),0,TP,0);
                 }Print("Ордер Модифицирован SELL ");
              }Print("Ошибка Модификации Ордера SELL");
        }
       }Print("Ошибка Открытия Позиции Sell");
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
   }
 
Alexander Avksentyev #:

Buon pomeriggio. Sto imparando a scrivere codice e ho un problema. Il codice nel tester viene eseguito, apre un trade e questo è tutto. Il prezzo non cambia, tutto si ferma sul posto.

A chi non dispiace, si prega di consigliare.

Ask+TakeProfit*_Point+OrderSwap()+OrderCommission()

Come si aggiunge lo swap e la commissione al prezzo?

 
MakarFX #:

Come si aggiunge lo swap e la commissione al prezzo?

Come faccio?).

(((Ask+TakeProfit*_Point+OrderSwap()+OrderCommission()*_Point))

Pensi che questo sia un problema?

 
Come faccio a far sì che Comment o Print in the log nella funzione OnTimer funzionino nel tester durante la visualizzazione?
 
Alexander Avksentyev #:

Come so contare).

Pensi che sia questo il problema?

Innanzitutto, quando si apre uno swap, non c'è alcuno swap.

In secondo luogo, assumiamo la commissione di 1$ si apre un ordine sulla sterlina a 1,32500

si aggiunge (TakeProfit) 200*_Point e (commissione) 1$ e si finisce con un TP di 2,32700 ... In quale decennio sarebbe?

 
Ivan Butko commento o la stampa nel registro nella funzione OnTimer durante la visualizzazione?
Aggiungere onTimer a onTick
 
MakarFX #:
Aggiungere onTimer a onTick

Grazie

 
Alexander Avksentyev #:

Come so contare).

Pensi che sia questo il problema?

No, non è giusto.


Con OrderModify è più corretto.

E meglio come blocco separato.

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());
  }
 
Alexander Avksentyev #:

Come so contare).

Pensi che sia questo il problema?

Non credo che sia questo il problema, semplicemente non è giusto. E per quanto riguarda il congelamento del tester, faresti meglio a postare l'intero codice e vedremo.

OrderCommission()*_Point

Anche questo non è giusto.

I punti sono decimali e non si traducono in punti in alcun modo
 
MakarFX #:

Non credo che sia questo il problema, semplicemente non è giusto. E per quanto riguarda il congelamento del tester, è meglio postare tutto il codice e vedere.

Anche questo non è giusto.

_Point è decimale e non si traduce in punti in alcun modo
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;

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//


//+------------------------------------------------------------------+
//| 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//
     if(Digits == 3 || Digits == 5)
       {
        TakeProfit      *=10;
        TrailStart      *=10;
        TrailDist       *=10;
        TrailStep       *=10;
        TrailTakeProfit *=10;
        Step            *=10;
        Slippage        *=10;
       }
       return(INIT_SUCCEEDED);
    }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
    double body = Close[1] - Open[1];
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Buy
    if (body > 0)
       {
        Forder = (OrderSend(_Symbol,OP_BUY,Lot,Ask,Slippage,0,0,"Коммент",Magic,0,Blue));
        {
         Print("Открыта Позиция BUY");
              {
               if(Forder > 0)
                  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());
                     }
               }
         }Print("Ошибка Открытия Позиции BUY");
       }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//Открытие позиции Sell      
    if (body < 0)
       {
        Forder = (OrderSend(_Symbol,OP_SELL,Lot,Bid,Slippage,0,0,"Коммент Sell",Magic,0,Red));
        {
         Print("Открыта Позиция SELL");
              if (Forder > 0)
                 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());
                   }
         }
        }Print("Ошибка Открытия Позиции BUY");}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//---
   double ret=0.0;
//---

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


È tutto lì. Grazie per il vostro aiuto.