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

 
Yan Barmin:
Confus. Comment obtenir le bénéfice (la perte) réel(le) sur un ordre ouvert (pas un ordre en attente) sur MT4, y compris toutes les commissions, les swaps, etc. (OrderProfit() + OrderSwap() + OrderCommission() ou seulementOrderProfit() ou autre chose ? J'aimerais gagner quelque chose après la clôture de la commande.
 OrderProfit() + OrderSwap() + OrderCommission()
 

Comment placer ces chiffres de volume sur les bougies dans la fenêtre du sous-sol, c'est-à-dire en bas ou faire en sorte que tous les chiffres aillent tous en ligne, un horizontalement au centre si le sous-sol ne fonctionne pas. Je vous serais très reconnaissant de m'aider.

#property indicator_chart_window

#propriété indicator_width1 2
#property indicator_width2 2
#propriété indicator_width3 2
#propriété indicator_width4 4
#propriété indicator_width5 4

#property indicator_color1 SkyBlue
#property indicator_color2 Maroon
#property indicator_color3 Yellow
#property indicator_color4 Blue
#propriété indicator_color5 DeepPink

extern int BarsToCount = 990 ;

extern string pus1 = "" ;
extern string p_s = "Paramètres des points" ;
extern bool use_points = true ;
extern int distance_point = 5 ;
extern color color_point_u = Lime ;
extern color color_point_d = DeepPink ;
extern color color_point_s = Yellow ;
extern inttern size_point = 14 ;

extern string pus2 = "" ;
extern string s_w = "Way" ;
extern bool use_show_same_way = true ;
extern bool use_show_daily_way = true ;

extern string pus3 = "" ;
extern string al = "Alerts" ;
extern bool use_alerts = false ;
extern string up_alert = "Up" ;
extern string down_alert = "Down" ;


doubler[] ;
double down[] ;
double mid[] ;
double up2[] ;
double down2[] ;
double none[] ;

static int prevtime = 0 ;

//
int init()
{

IndicatorShortName("A") ;
retour(0) ;
}

//
int deinit()
{
chaîne de caractères nom_de ;
for(int c=BarsToCount;c>=0;c--)
{
nom_de="Vol_"+DoubleToStr(c,0) ;
if(ObjectFind(name_de)!=-1) ObjectDelete(name_de) ;
}
retour(0) ;
}
//////////////////////////////////////////
int start()
{
////////////
up[0]=EMPTY_VALUE ;
down[0]=EMPTY_VALUE ;
mid[0]=EMPTY_VALUE ;
if(Close[0]>Open[0]) up[0]=Volume[0];
if(Close[0]<Open[0]) down[0]=Volume[0];
if(Close[0]==Open[0]) mid[0]=Volume[0];

////////////////
if(use_points)
Ob_cre(0) ;

si(!use_points)
Ob_del(0) ;
////////////
si(Time[0] == prevtime) return(0) ;
prevtime = Time[0] ;
///////////////////////////
for(int c=BarsToCount;c>=1;c--)
{
////////////
if(use_points)
Ob_cre(c) ;

si(!use_points)
Ob_del(c) ;
////////////
up[c]=EMPTY_VALUE ;
down[c]=EMPTY_VALUE ;
mid[c]=EMPTY_VALUE ;
up2[c]=EMPTY_VALUE ;
down2[c]=EMPTY_VALUE ;

/////////////////
si(Close[c]>Open[c]) up[c]=Volume[c] ;
si(Close[c]<Open[c]) down[c]=Volume[c] ;
if(Close[c]==Open[c]) mid[c]=Volume[c];
none[c]=Volume[c]+Volume[c]/6;


//////////////
if(use_show_same_way)
{

if(Close[c]>Open[c] && Close[c+1]>Open[c+1])
{
up2[c]=Volume[c]; up2[c+1]=Volume[c+1];
up[c]=EMPTY_VALUE ; up[c+1]=EMPTY_VALUE ;
}

if(Close[c]<Open[c] && Close[c+1]<Open[c+1])
{
down2[c]=Volume[c]; down2[c+1]=Volume[c+1];
down[c]=EMPTY_VALUE ; down[c+1]=EMPTY_VALUE ;
}

}


if(use_alerts)
{
if(up2[1]!=EMPTY_VALUE && up2[4]==EMPTY_VALUE) Alert(up_alert) ;
if(down2[1]!=EMPTY_VALUE && down2[4]==EMPTY_VALUE) Alert(down_alert) ;
}
}
retour(0) ;
}
//func
//+------------------------------------------------------------------+///////////////////////////////
void Ob_cre(int num_de_bar)
{
string name="Vol_"+DoubleToStr(num_de_barre,0) ;

couleur col_po ;
if(Close[num_de_bar] >Open[num_de_bar]) col_po=color_point_u ;
if(Close[num_de_bar] <Open[num_de_bar]) col_po=color_point_d ;
if(Close[num_de_bar] ==Open[num_de_bar]) col_po=color_point_s ;

si(ObjectFind(name)==-1)
{
ObjectCreate(nom,OBJ_TEXT,0,0)
}
ObjectSet(name,OBJPROP_TIME1,Time[num_de_bar]) ;
ObjectSet(name,OBJPROP_PRICE1,High[num_de_bar] +distance_point*Point) ;
ObjectSet(name,OBJPROP_ANGLE,90) ;
ObjectSetText(name,DoubleToStr(Volume[num_de_bar],0),size_point, "Arrial",col_po) ;
ObjectSet(name,OBJPROP_ANCHOR,ANCHOR_CENTER) ;
}

//
void Ob_del(int num_de_bar)
{
string name="Vol_"+DoubleToStr(num_de_barre,0) ;
}

Dossiers :
 

Je crée un symbole synthétique basé sur EURUSD, nommé ZIGZAG (pour éviter les conflits de noms).

J'importe les barres des minutes, tout est importé avec succès, mais lors de la re-demande, le nombre de barres est de 0. Il y a un fichier créé "2019.hcc" de 39 mb dans le dossier "history/symbol", le dossier "ticks" est tout vide. Changé le terminal (version actuelle du 30 mai 2019), ordinateur - partout ne fonctionne pas.

Quelle pourrait être l'erreur ?

Dossiers :
simvol.zip  809 kb
 
SEM:

Je crée un symbole synthétique basé sur EURUSD, nommé ZIGZAG (pour éviter les conflits de noms).

J'importe les barres des minutes, tout est importé avec succès, mais lors de la re-demande, le nombre de barres est de 0. Il y a un fichier créé "2019.hcc" de 39 mb dans le dossier "history/symbol", le dossier "ticks" est tout vide. Changé le terminal (version actuelle du 30 mai 2019), ordinateur - partout ne fonctionne pas.

Quelle pourrait être l'erreur ?

Dans les noms correspondants
 
Bonjour à tous, pourquoi ne pas améliorer l'article MT4 Balance sur la version démo et le rendre modifiable ? Quelle serait la possibilité de modifier l'équilibre de la démo à sa discrétion. Soit faire le plein. Ou retirer la démo et faire en sorte que le trading sur la démo soit aussi proche du réel ?
 
oleqas1:
Bonjour, comment voulez-vous améliorer l'article MT4 Balance sur la version Demo et le rendre modifiable ? Quelle serait la possibilité d'équilibrer la démo par vous-même pour changer. Soit faire le plein. Ou bien retirer les fonds de la démo et faire en sorte que le trading sur la démo soit aussi proche du réel ?

MetaTrader4 ne sera plus mis à jour - le développement de cette plateforme a été arrêté depuis longtemps. Tout au plus, des bogues importants sont corrigés.

Allez sur MetaTrader5 et utilisez TesterWithdrawal().

Документация по MQL5: Общие функции / TesterWithdrawal
Документация по MQL5: Общие функции / TesterWithdrawal
  • www.mql5.com
Общие функции / TesterWithdrawal - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Bonjour, Comment calculer la volatilité des sessions européennes sur 3 jours ?
 

Bonjour, s'il y a par exemple un buystop et un buylimit.

Un buystop est ouvert, modifiez buylimit et définissez un nouveau buystop.

Ouvrez buylimit besoin de modifier buystop et de définir un nouveau buylimit.

J'ai essayé de le faire, il s'ouvre, mais les messages d'erreur OrderModify error 1, OrderModify error 130. Je n'arrive pas à comprendre comment le réparer. Aidez-moi, s'il vous plaît.


void OnTick()
  {
      price_buystop = NormalizeDouble(Ask+StopLoss*Point,Digits);
      price_buyLimit = NormalizeDouble(price_buystop-StopLoss*2*Point,Digits);
      price_buy = PriceOpenLastPos();
      
      //для байстоп
        if (BuyStopCount()==0)//если нет байстопа
       { 
       TP= NormalizeDouble(price_buystop + TakeProfit*Point,Digits);
       SL= NormalizeDouble(price_buystop - StopLoss*Point,Digits);  
       if(CountBuy()==0)// и нет открытых бай 
       {    
       int ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,price_buystop,Slippage,SL,TP,"buystop",Magic,0,Blue);       
       if (ticket <0) Print ("Не удалось открыть buystop ");
       }
         if (CountBuy()>=1) // если нет байстоп но есть открытая
         {  
        price_buystop = NormalizeDouble(price_buy + StopLoss*Point,Digits);
        int ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,price_buystop,Slippage,SL,TP,"buystop",Magic,0,Blue);       
        if (ticket <0) Print ("Не удалось открыть buystop ");            
         } 
      } else {   //если есть байстоп модифицируем
      if (CountBuy()>=1)//и есть открытые и байстоп
         {        
         price_buystop = NormalizeDouble(price_buy+StopLoss*Point,Digits);
         TP= NormalizeDouble(price_buystop + TakeProfit*Point,Digits);
         SL= NormalizeDouble(price_buystop - StopLoss*Point,Digits);        
         bool res = OrderModify(OrderTicket(),price_buystop,SL,TP,0,Blue);     
         }   
      }
      
   //для байлимит
        if (BuyLimitCount()==0) // если нет байлимит
       {   
       TP= NormalizeDouble(price_buyLimit + TakeProfit*Point,Digits);
       SL= NormalizeDouble(price_buyLimit - StopLoss*Point,Digits); 
        if(CountBuy()==0)// и нет открытых открываем
        {
         int ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,price_buyLimit,Slippage,SL,TP,"BuyLimit",Magic,0,Blue);       
         if (ticket <0) Print ("Не удалось открыть BuyLimit ");   
        }
        if (CountBuy()>=1)// если открытая есть
         {         
        price_buyLimit = NormalizeDouble(price_buy - StopLoss*Point,Digits);       
        int ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,price_buyLimit,Slippage,SL,TP,"BuyLimit",Magic,0,Blue);         
        if (ticket <0) Print ("Не удалось открыть BuyLimit ");            
         }           
      }  else { // если есть байлимит и есть открытая
       if (CountBuy()>=1)
         {
         price_buyLimit = NormalizeDouble(price_buy-StopLoss*Point,Digits);         
         TP= NormalizeDouble(price_buyLimit + TakeProfit*Point,Digits);
         SL= NormalizeDouble(price_buyLimit - StopLoss*Point,Digits);        
         bool res = OrderModify(OrderTicket(),price_buyLimit,SL,TP,0,Blue);    
         }   
      }
   
  }
//+------------------------------------------------------------------+
// проверяем есть ли байстоп ордера с конца
  int BuyStopCount()
  {
  int count = 0;
  for (int i=OrdersTotal()-1;i>=0;i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES) == true && 
        OrderMagicNumber()== Magic && OrderType() == OP_BUYSTOP )                        
        {
        count ++;
        }
    }
    return(count); 
  }
  
  // проверяем есть ли ,байлимит ордера с конца
  int BuyLimitCount()
  {
  int count = 0;
  for (int i=OrdersTotal()-1;i>=0;i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber()== Magic &&                        
        OrderType() == OP_BUYLIMIT )                       
        {
        count ++;
        }
    }
    return(count);      
  }
  
   //проверяем открытые ордера покупку
  int CountBuy()
  {
  int count = 0;
  for (int trade = OrdersTotal()-1; trade>=0; trade --)
  {
    if (OrderSelect (trade, SELECT_BY_POS, MODE_TRADES) ==true)
    {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()== Magic && OrderType()== OP_BUY)
        count++;
    }
   }return(count);
  }
  
  
  // возвращает цену открытия последней открытой позиции
  
  double PriceOpenLastPos()
{
int k=OrdersTotal();
double r =0;
int i;

for (i=0; i<k; i++)
  {
  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   {
    if (OrderSymbol()== Symbol() && OrderMagicNumber()== Magic && OrderType()== OP_BUY)
     r=OrderOpenPrice();
   }
}return (r);
}


 

A quoi sont associées ces erreurs lors du test d'un EA dans le testeur de stratégie dans MT4 ?


 
Alexandr Sokolov:

A quoi sont associées ces erreurs lors du test d'un EA dans le testeur de stratégie dans MT4 ?


Historique des charges. F2.