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

 
Yan Barmin:
Confuso. Come posso ottenere il profitto reale (perdita) su un ordine aperto (non un ordine pendente) su MT4, comprese tutte le commissioni, gli swap, ecc. (OrderProfit() + OrderSwap() + OrderCommission() o soloOrderProfit() o qualcos'altro? Vorrei guadagnare qualcosa dopo la chiusura dell'ordine.
 OrderProfit() + OrderSwap() + OrderCommission()
 

Come posizionare queste figure di volume sulle candele nella finestra del seminterrato, cioè in basso o fare in modo che tutte le figure vadano tutte come una linea orizzontale al centro se il seminterrato non funziona. Sarei molto grato per l'aiuto.

#proprietà indicator_chart_window

#proprietà indicator_width1 2
#proprietà indicator_width2 2
#proprietà indicator_width3 2
#proprietà indicator_width4 4
#proprietà indicator_width5 4

#property indicator_color1 SkyBlue
#property indicator_color2 Maroon
#proprietà indicator_color3 Giallo
#property indicator_color4 Blue
#property indicator_color5 DeepPink

extern int BarsToCount = 990;

extern string pus1 = "";
extern string p_s = "Impostazioni punti";
extern bool use_points = true;
extern int distance_point = 5;
extern color_point_u = Lime;
extern color_point_d = DeepPink;
extern color_point_s = Giallo;
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";


double up[];
double down[];
doppio mid[];
doppio up2[];
doppio down2[];
doppio nessuno[];

static int prevtime = 0;

//
int init()
{

IndicatoreNomeCorto("A");
ritorno(0);
}

//
int deinit()
{
stringa name_de;
for(int c=BarsToCount;c>=0;c--)
{
name_de="Vol_"+DoubleToStr(c,0);
if(ObjectFind(name_de)!=-1) ObjectDelete(name_de);
}
ritorno(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];

////////////////
se(punti_utili)
Ob_cre(0);

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

se(!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;

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


//////////////
se(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);
}
}
ritorno(0);
}
//func
//+------------------------------------------------------------------+///////////////////////////////
void Ob_cre(int num_of_bar)
{
string name="Vol_"+DoubleToStr(num_of_bar,0);

colore col_po;
se(Close[num_of_bar]>Open[num_of_bar]) col_po=color_point_u;
if(Close[num_of_bar]<Open[num_of_bar]) col_po=color_point_d;
if(Close[num_of_bar]==Open[num_of_bar]) col_po=color_point_s;

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

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

File:
 

Creo un simbolo sintetico basato su EURUSD, nome ZIGZAG (per evitare conflitti di nome)

Importo le barre dei minuti, tutto viene importato con successo, ma su una nuova richiesta il numero di barre è 0. C'è un file creato "2019.hcc" di 39 mb nella cartella "history/symbol", la cartella "ticks" è tutta vuota. Cambiato il terminale (versione attuale dal 30 maggio 2019), computer - ovunque non funziona.

Quale potrebbe essere l'errore?

File:
simvol.zip  809 kb
 
SEM:

Creo un simbolo sintetico basato su EURUSD, nome ZIGZAG (per evitare conflitti di nome)

Importo le barre dei minuti, tutto viene importato con successo, ma su una nuova richiesta il numero di barre è 0. C'è un file creato "2019.hcc" di 39 mb nella cartella "history/symbol", nella cartella "ticks" è tutto vuoto. Cambiato il terminale (versione attuale dal 30 maggio 2019), computer - ovunque non funziona.

Quale potrebbe essere l'errore?

Nei nomi corrispondenti
 
Ciao a tutti, che ne dite di migliorare l'articolo MT4 Balance sulla versione demo e renderlo modificabile? Quale sarebbe la possibilità di cambiare l'equilibrio della demo a sua discrezione. O si ricarica. O ritirare la demo e fare trading sulla demo come vicino al reale?
 
oleqas1:
Ciao, come vorresti migliorare l'articolo MT4 Balance sulla versione Demo e renderlo modificabile? Quale sarebbe la possibilità di equilibrio demo da solo per cambiare. O si ricarica. O ritirare i fondi demo e fare trading sul demo come se fosse reale?

MetaTrader4 non sarà più aggiornato - lo sviluppo di questa piattaforma è stato fermato molto tempo fa. Al massimo, sono stati corretti dei bug significativi.

Vai su MetaTrader5 e usa TesterWithdrawal()

Документация по MQL5: Общие функции / TesterWithdrawal
Документация по MQL5: Общие функции / TesterWithdrawal
  • www.mql5.com
Общие функции / TesterWithdrawal - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Salve, come posso calcolare la volatilità delle sessioni europee su 3 giorni?
 

Ciao, se c'è per esempio un buystop e un buylimit.

Un buystop è aperto, modifica il buylimit e imposta un nuovo buystop.

Apre buylimit bisogno di modificare buystop e impostare un nuovo buylimit.

Ho provato a farlo, si apre, ma i messaggi di errore OrderModify error 1, OrderModify error 130. Come risolvere il problema non riesco a capire. Per favore, aiutatemi.


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 cosa sono associati questi errori quando si testa un EA nel tester di strategia in MT4?


 
Alexandr Sokolov:

A cosa sono associati questi errori quando si testa un EA nel tester di strategia in MT4?


Storia del carico. F2.
Motivazione: