Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1808

 

Bon après-midi. J'apprends à écrire du code et j'ai un problème. Le code dans le testeur s'exécute, ouvre une transaction et c'est tout. Le prix ne change pas, tout reste en place.

Qui n'est pas difficile, veuillez me conseiller.

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

Bon après-midi. J'apprends à écrire du code et j'ai un problème. Le code dans le testeur s'exécute, ouvre une transaction et c'est tout. Le prix ne change pas, tout reste en place.

Si ça ne vous dérange pas, dites-le moi.

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

Comment ajoutez-vous le swap et la commission au prix ?

 
MakarFX #:

Comment ajoutez-vous le swap et la commission au prix ?

Comment dois-je faire ?)

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

Pensez-vous que c'est un problème ?

 
Comment faire pour que la fonction Commentaire ou Imprimer dans le journal de la fonction OnTimer fonctionne dans le testeur pendant la visualisation ?
 
Alexander Avksentyev #:

Comme je sais compter.)

Vous pensez que c'est le problème ?

Premièrement, lorsque vous ouvrez un swap, il n'y a pas de swap.

Deuxièmement, supposons que la commission de 1$ vous ouvre un ordre sur la livre à 1.32500

vous ajoutez (TakeProfit) 200*_Point et (commission) 1$ et vous obtenez un TP de 2.32700 ... Dans quelle décennie serait-ce ?

 
Ivan Butko commentaire ou l'impression dans le journal dans la fonction OnTimer fonctionne dans le testeur pendant la visualisation ?
Ajouter onTimer à onTick
 
MakarFX #:
Ajouter onTimer à onTick

Merci.

 
Alexander Avksentyev #:

Comme je sais compter.)

Vous pensez que c'est le problème ?

Non, ce n'est pas bien.


Avec OrderModify, c'est plus correct.

Et mieux comme un bloc séparé.

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

Comme je sais compter.)

Vous pensez que c'est le problème ?

Je ne pense pas que ce soit le problème, ce n'est juste pas bien. Et pour ce qui est du gel du testeur, vous feriez mieux de poster le code entier et nous verrons.

OrderCommission()*_Point

Ce n'est pas bien non plus.

Les points sont des décimales et ne se transforment en aucun cas en points.
 
MakarFX #:

Je ne pense pas que ce soit le problème, ce n'est juste pas bien. Et pour ce qui est du gel du testeur, vous feriez mieux de poster tout le code et de voir.

Ce n'est pas bien non plus.

Le point est décimal et ne se traduit en aucun cas en points.
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//


Tout est là. Merci pour votre aide.