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

 
Vladislav Andruschenko:
Spanne, wenn auf aktuell gesetzt. Enddatum des Tests, wenn er als aktuell abgerechnet wird. Es kann viele weitere Gründe geben.

Fester Spread, Enddatum 01.01.18

 
Aidar Kaliaskar:

Fester Spread, Enddatum 01.01.18


Kosten pro Punkt..... usw.


dieses Wochenende versuchen.

 

Ich versuche, einen Indikator in MQL4 zu erstellen, der eine Linie auf dem "US.500+"-Diagramm durch die Schlusskurse von "US.30+" darstellt. Im Allgemeinen sind die Kurslinien zweier Symbole in einem Diagramm zu sehen. Unten ist der Code, aber er funktioniert nicht. In der Protokollmeldung "Indikator für benutzerdefinierten Puffer wird noch nicht unterstützt". Erklären Sie mir, warum es nicht funktioniert. Opps.

#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_color1 clrRed
#property indicator_style1 STYLE_DOT
#property indicator_type1  DRAW_LINE
//---
input string   symbolName="US.30+"; // Symbol name
input double   difference=-22387.0; // Difference from other symbol
//--- price buffer for other symbol
double otherSymbol[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,otherSymbol,INDICATOR_DATA);
//---
   return INIT_SUCCEEDED;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int     rates_total,
                const int     prev_calculated,
                const int     begin,
                const double &price[])
  {
//---
   for(int i=prev_calculated;i<rates_total;i++)
      otherSymbol[i+1]=iClose(symbolName,PERIOD_CURRENT,i)+difference;
   ArraySetAsSeries(otherSymbol,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
Maxim Khrolenko:

Ich versuche, einen Indikator in MQL4 zu erstellen, der eine Linie auf dem "US.500+"-Diagramm durch die Schlusskurse von "US.30+" darstellt. Im Allgemeinen sind die Kurslinien zweier Symbole in einem Diagramm zu sehen. Unten ist der Code, aber er funktioniert nicht. In der Protokollmeldung "Indikator für benutzerdefinierten Puffer wird noch nicht unterstützt". Erklären Sie mir, warum es nicht funktioniert. Opps.

Denn Sie müssen die erste Form des Aufrufs verwenden.
 
Artyom Trishkin:
Denn Sie müssen die erste Form des Aufrufs verwenden.
Ich habe es geändert und... Es hat funktioniert! Ich danke Ihnen vielmals.
 
STARIJ:

Ich habe den Grund gefunden - 60 Sekunden sollten aus einer Schleife herausgezählt werden

Danke, danke für die Klarstellung.

Statt 60 Sekunden werden es 300 sein.

DiePositionseröffnungszeiten sind unterschiedlich, Sie müssen 300 Sekunden Abstand zur Positionseröffnungszeit schreiben.

Wie soll ich das machen?

 
lil_lil Wenn es 300 statt 60 Sekunden sind ... Sie müssen in Abständen von 300 Sekunden ab dem Zeitpunkt der Positionseröffnung schreiben. Wie machen Sie das?

Haben Sie mein Programm ausprobiert? Ich verstehe 300 nicht wirklich... Stimmt es, wenn Sie 300 statt 60 einstellen? Wenn Sie mir sagen, wie man davon profitieren kann, werde ich versuchen, es besser zu verstehen!

 

Hilfe mit dem EA, wie immer ist das Problem wahrscheinlich trivial, aber ich habe das Rätsel nicht gelöst

Sollte Kauf öffnen, wennema>smma vonema oder nicht erreichen esPunkt(das gleiche für Verkauf). Sie sollten das Geschäft am Ende der Bar abschließen und eine neue Bar eröffnen. Die nächste Eröffnung auf die gleiche Weise, aber mit einer Bedingung über demEröffnungskurs der vorherigen, d.h.last_order_price.

Aber am Ende öffnet es sich, wo es will, und schließt sich wieder. (Zu Beginn des Tests öffnet es sich und schließt sich sofort wieder)

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

input int MA_period=10;
input int take=200, stop=200, Magic=1104;
input double lot=0.05;
input int slippage=30;
input int point=5;
double last_order_price,fast_MA,slow_MA;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   fast_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_EMA,PRICE_CLOSE,0);
   slow_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_SMMA,PRICE_CLOSE,0);
 
   if(fast_MA>slow_MA) last_order_price=0;
      else last_order_price=Ask+stop*_Point;

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   fast_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_EMA,PRICE_CLOSE,0);
   slow_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_SMMA,PRICE_CLOSE,0);
   
   if(Bid<=fast_MA+point*_Point && Bid>=fast_MA && fast_MA>slow_MA && SymOrder() && Bid>last_order_price)
   {
      OrderSend(Symbol(),OP_BUY,lot,Ask,slippage,Ask-stop*_Point,Ask+take*_Point,NULL,Magic,0,clrBlue);
      last_order_price=Bid;
   }
   
   if(Bid>=fast_MA-point*_Point && Bid<=fast_MA && fast_MA<slow_MA && SymOrder() && Bid<last_order_price)
   {
      OrderSend(Symbol(),OP_SELL,lot,Bid,slippage,Bid+stop*_Point,Bid-take*_Point,NULL,Magic,0,clrRed);   
      last_order_price=Bid;
   }
      
   if(!SymOrder() && Volume[0]<2 && OrderType()==OP_BUY)
   {
      OrderClose(OrderTicket(),lot,Bid,slippage,clrWhite); 
      
   }
   if(!SymOrder() && Volume[0]<2 && OrderType()==OP_SELL)
   {
      OrderClose(OrderTicket(),lot,Ask,slippage,clrWhite);  

   }     
      
  }
//+------------------------------------------------------------------+
bool SymOrder()
{
   for(int i=0; i<OrdersTotal(); i++)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) return false;
      }

   return true;
}
 
Roman Sharanov:

Hilfe mit EA, wie immer ist das Problem wahrscheinlich trivial, aber ich habe das Rätsel nicht gelöst

Sollte Kauf öffnen, wennema>smma vonema oder nicht erreichen esPunkt(das gleiche für Verkauf). Sie sollten das Geschäft am Ende der Bar abschließen und eine neue Bar eröffnen. Die nächste Eröffnung auf die gleiche Weise, aber mit einer Bedingung über demEröffnungskurs der vorherigen, d.h.last_order_price.

Aber am Ende öffnet es sich, wo es will, und schließt sich wieder. (Zu Beginn des Tests öffnet es sich und schließt sich sofort wieder)

Was kann ich vorschlagen? Speichern Sie Ihren Code in der Zwischenablage, schreiben Sie ihn in den Expert Advisor und führen Sie ihn im Strategietester aus? Nun, ich werde dafür sorgen, dass sie sich öffnet und schließt. Na und? Ich kann es auf einer Demo laufen lassen - heute ist Samstag, morgen ist Sonntag, der Markt ist geschlossen. Müssen Sie sie mit den Augen sehen? Nun, Sie müssen die Werte aller Variablen im Auge behalten. Früher gab es eine Methode zur Fehlersuche mit Bleistift und Papier - probieren Sie es aus. Sie können auch einen Alert("Bid=", Bid, Fast+P=",Fast_Ema+point*_Point," ....) vor alle OrderSelect und OrderClose setzen und einen Tag im Tester z.B. vom 19. bis 20. Februar einstellen und dann nach dem Test das Log öffnen, eine Kopie machen, unnötige Zeilen löschen und analysieren. Der MetaEditor verfügt auch über eine Debugging-Funktion. Wenn Sie lernen, wie man debuggt ... Es wird großartig sein.
 

Wo gibt es einen Knopf?

Können Sie mir sagen, wie ich den Text im CSpinEdit-Steuerelement aus #include <Controls\SpinEdit.mqh> (Textfeld mit Inkrement) ausrichten kann.

Standardmäßig ist es am linken Rand ausgerichtet, aber ich möchte es rechts ausrichten.

Grund der Beschwerde: