Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 865

 
Yan Barmin:
Verwirrt. Wie ermittle ich den tatsächlichen Gewinn (Verlust) bei einem offenen Auftrag (nicht bei einem schwebenden Auftrag) auf MT4, einschließlich aller Provisionen, Swaps usw.? (OrderProfit() + OrderSwap() + OrderCommission() oder nurOrderProfit() oder etwas anderes? Ich möchte gerne etwas verdienen, nachdem die Bestellung abgeschlossen ist.
 OrderProfit() + OrderSwap() + OrderCommission()
 

Wie platziert man diese Volumenzahlen auf den Kerzen im Kellerfenster, d.h. unten, oder macht man alle Zahlen als eine Linie waagerecht in der Mitte, wenn der Keller nicht funktioniert. Für Hilfe wäre ich sehr dankbar.

#property indicator_chart_window

#Eigenschaft indicator_width1 2
#property indicator_width2 2
#Eigenschaft indicator_width3 2
#Eigenschaft indicator_width4 4
#Eigenschaft indicator_width5 4

#property indicator_color1 SkyBlue
#property indicator_color2 Kastanienbraun
#property indicator_color3 Gelb
#Eigenschaft indicator_color4 Blau
#property indicator_color5 DeepPink

extern int BarsToCount = 990;

externer String pus1 = "";
externer String p_s = "Punkteeinstellungen";
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 = Gelb;
extern inttern size_point = 14;

externer String pus2 = "";
externer String s_w = "Way";
extern bool use_show_same_way = true;
extern bool use_show_daily_way = true;

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


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

static int prevtime = 0;

//
int init()
{

IndikatorKurzname("A");
zurück(0);
}

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

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

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

/////////////////
if(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;


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

if(Schließen[c]>Öffnen[c] && Schließen[c+1]>Öffnen[c+1])
{
up2[c]=Volume[c]; up2[c+1]=Volume[c+1];
up[c]=EMPTY_VALUE; up[c+1]=EMPTY_VALUE;
}

if(Schließen[c]<Öffnen[c] && Schließen[c+1]<Öffnen[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);
}
}
zurück(0);
}
//func
//+------------------------------------------------------------------+///////////////////////////////
void Ob_cre(int num_of_bar)
{
string name="Vol_"+DoubleToStr(num_of_bar,0);

Farbe col_po;
if(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(Name,OBJ_TEXT,0,0)
}
ObjectSet(name,OBJPROP_TIME1,Time[num_of_bar]);
ObjectSet(name,OBJPROP_PRICE1,High[num_of_bar]+distance_point*Point);
ObjectSet(name,OBJPROP_ANGLE,90);
ObjectSetText(name,DoubleToStr(Volume[num_of_bar],0),size_point, "Arrial",col_po);
ObjectSet(name,OBJPROP_ANCHOR,ANCHOR_CENTER);
}

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

Dateien:
 

Ich erstelle ein synthetisches Symbol auf der Basis von EURUSD, Name ZIGZAG (um Namenskonflikte zu vermeiden)

Ich importiere die Minutenbalken, alles wird erfolgreich importiert, aber bei einer erneuten Anfrage ist die Anzahl der Balken 0. Es gibt eine erstellte Datei "2019.hcc" von 39 MB im Ordner "history/symbol", im Ordner "ticks" ist alles leer. Habe das Terminal gewechselt (aktuelle Version vom 30.05.2019), Computer - funktioniert nicht überall.

Worin könnte der Fehler liegen?

Dateien:
simvol.zip  809 kb
 
SEM:

Ich erstelle ein synthetisches Symbol auf der Basis von EURUSD, Name ZIGZAG (um Namenskonflikte zu vermeiden)

Ich importiere die Minutenbalken, alles wird erfolgreich importiert, aber bei einer erneuten Anfrage ist die Anzahl der Balken 0. Es gibt eine erstellte Datei "2019.hcc" von 39 MB im Ordner "history/symbol", im Ordner "ticks" ist alles leer. Habe das Terminal gewechselt (aktuelle Version vom 30.05.2019), Computer - funktioniert nicht überall.

Worin könnte der Fehler liegen?

Bei den übereinstimmenden Namen
 
Hallo zusammen, wie wäre es, den MT4-Artikel Balance in der Demoversion zu verbessern und änderbar zu machen? Welche Möglichkeiten gibt es, das Demoguthaben nach eigenem Ermessen zu ändern? Entweder nachfüllen. Oder das Demogeld abheben und den Handel auf der Demo so nah wie möglich an den realen Handel heranführen?
 
oleqas1:
Hallo, wie möchten Sie den MT4-Artikel Balance in der Demo-Version verbessern und editierbar machen? Was wäre die Möglichkeit der Demo-Balance auf eigene Faust zu ändern. Entweder nachfüllen. Oder das Demogeld abheben und den Handel mit der Demo so realitätsnah wie möglich gestalten?

MetaTrader4 wird nicht mehr aktualisiert - die Entwicklung dieser Plattform wurde vor langer Zeit eingestellt. Es werden allenfalls wichtige Fehler behoben.

Gehen Sie zu MetaTrader5 und verwenden Sie TesterWithdrawal()

Документация по MQL5: Общие функции / TesterWithdrawal
Документация по MQL5: Общие функции / TesterWithdrawal
  • www.mql5.com
Общие функции / TesterWithdrawal - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Hallo, wie kann ich die Volatilität der europäischen Sitzungen über 3 Tage berechnen?
 

Hallo, wenn es z.B. einen Buystop und ein Buylimit gibt.

Ein Buystop wird geöffnet, das Buylimit geändert und ein neuer Buystop gesetzt.

Öffnet buylimit muss buystop geändert und ein neues buylimit festgelegt werden.

Ich habe versucht, dies zu tun, es öffnet sich, aber Fehlermeldungen OrderModify Fehler 1, OrderModify Fehler 130. Wie man das beheben kann, weiß ich nicht. Bitte helfen Sie mir.


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


 

Womit sind diese Fehler verbunden, wenn ich einen EA im Strategietester in MT4 teste?


 
Alexandr Sokolov:

Womit sind diese Fehler verbunden, wenn ich einen EA im Strategietester in MT4 teste?


Lastgeschichte. F2.