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

 
AlGuru Bitte beraten Sie mich. Wie kann man im Expert Advisor festlegen, dass bei der nächsten Kerze geschlossen wird?
datetime Time[] - Array Time, das die Öffnungszeit der einzelnen Balken des aktuellen Diagramms enthält.Time[0] - Die Eröffnungszeit des letzten Taktes. Wenn die OrderOpenTime() kleiner ist alsTime[0] - bedeutet dies, dass die Order im letzten Takt geöffnet wurde und es gemäß Ihrer Strategie an der Zeit ist, diese Order zu schließen.
 
STARIJ:
datetime Time[] - Zeit-Array, das die Öffnungszeit jedes Balkens des aktuellen Diagramms enthält.Time[0] - Die Eröffnungszeit des letzten Taktes. Wenn die OrderOpenTime() auf weniger als Time[0] geöffnet ist, bedeutet dies, dass die Order im letzten Takt geöffnet wurde, und dass es gemäß Ihrer Strategie an der Zeit ist, diese Order zu schließen.
Oder es wurde vergessen und vor einem Jahr eröffnet, zum Beispiel ;)
 
STARIJ:
datetime Time[] - Array Zeitreihe, die die Öffnungszeit jedes Balkens des aktuellen Diagramms enthält.Time[0] - Zeitpunkt des letzten offenen Balkens. Wenn die OrderOpenTime() kleiner ist alsTime[0] - bedeutet dies, dass die Order im letzten Takt geöffnet wurde und es gemäß Ihrer Strategie an der Zeit ist, diese Order zu schließen.


Ich danke Ihnen! Ich habe gerade das Problem mit der iTime-Funktion gelöst. Ich kenne mich noch nicht so gut mit Arrays aus)).

 
AlGuru:


Ich danke Ihnen! Ich habe das Problem gerade mit der Funktion iTime gelöst. Ich kenne mich noch nicht so gut mit Arrays aus)).

Zeigen Sie mir, wie Sie das Problem gelöst haben.

Es gibt nur etwas, das Sie vielleicht nicht bedacht haben:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Alle Fragen von Neulingen zu MQL4, Hilfe und Diskussion über Algorithmen und Codes

Artyom Trishkin, 2017.05.25 19:43

STARIJ:
datetime Time[] - Zeit-Array, das die Öffnungszeit jedes Balkens des aktuellen Diagramms enthält.Time[0] - Die Eröffnungszeit des letzten Taktes. Wenn die OrderOpenTime ()kleiner istals Time[0]- bedeutet dies, dass die Order im letzten Balken geöffnet wurde, und dass es gemäß Ihrer Strategie an der Zeit ist, diese Order zu schließen.

Entweder ist es in Vergessenheit geraten und wurde zum Beispiel vor einem Jahr entdeckt ;)

 
Artyom Trishkin:

Zeigen Sie mir, wie Sie das Problem gelöst haben.

Es gibt nur ein paar Dinge, die Sie vielleicht nicht bedacht haben:



OrderOpenTime() < iTime(Symbol(), 0, 0)
 
AlGuru:

OrderOpenTime() < iTime(Symbol(), 0, 0)

Und wenn der Zeitpunkt der Eröffnung der Bestellung eine Woche zurückliegt? Dann handelt es sich definitiv nicht um die letzte Kerze (wenn es sich nicht um ein Wochenchart handelt). Sollten wir sie auch schließen?

Natürlich hängt das alles von den Anforderungen Ihres TS ab, aber ich würde den anderen Weg gehen...

 
Artyom Trishkin:

Und wenn der Zeitpunkt der Eröffnung der Bestellung eine Woche zurückliegt? Dann handelt es sich definitiv nicht um die letzte Kerze (wenn es sich nicht um ein Wochenchart handelt). Sollten wir sie auch schließen?

Natürlich hängt alles von den Anforderungen Ihres TS ab, aber ich würde den anderen Weg gehen...


Dies ist eine zusätzliche Bedingung. Eine Position sollte geschlossen werden, wenn der Kurs die MA-Linie erreicht. Manchmal eröffnet der Kurs genau auf der Linie und eröffnet und schließt Positionen bei jedem Tick. Ich habe dieses Problem gelöst, indem ich eine Position nicht vor der nächsten Kerze geschlossen habe.
 

Guten Tag an alle!

Bitte geben Sie an, wie die folgende Aktion im Strategietester zu kodieren ist

Allgemeine Idee

1.offene Bestellung N -X (Volumen = 0,1)

2.wenn dieser Auftrag auf SL geschlossen wird, dann, um den Verlust zu kompensieren, sofort zum Schlusskurs auf SL eines Auftrags N X, den Auftrag N - X1 eröffnen (Volumen = 0,3)

WIR MÜSSEN TUN.

3 Wenn der Auftrag (Volumen = 0,3) bei SL geschlossen wird, wird nur der Wert der Eröffnungsstunde des Auftrags N - X gespeichert, um die Verluste auszugleichen , zu denen er eröffnet wurde.

Ich weiß, wie man beide Orders eröffnet, aber ich kann nicht herausfinden, wie man den Stundenwert für eine Order mit 0,1 Lot Volumen, die am SL geschlossen wurde, speichert.

HINWEIS: Dies bezieht sich auf Auftragsabschlüsse auf demselben Tick.

Manchmal werden mehr als ein Auftrag mit einem Volumen von 0,1 und 0,3 auf einem Tick geschlossen.

Wenn z.B. 3 Aufträge zu 0,1 auf einen einzigen Tick an einem SL geschlossen werden, anstatt 3 Aufträge zu 0,3 zu eröffnen. - nur 1 Auftrag über 0,3 Lose ist eröffnet

Wenn ich in diesem Fall nur einen Auftrag von 0,3 Lots auf dem SL schließe, erhalte ich nicht die Werte der Stunde, wenn zwei Aufträge von 0,1 Lots geöffnet werden , die ihre Verluste ausgleichen.

D.h., in diesem Fall müssen 3 Aufträge zu 0,3 Lots eröffnet werden, nicht einer.


Manchmal werden 3 Aufträge von 0,3 Lots durch einen SL auf einen Tick geschlossen, obwohl die entsprechenden 0,1-Lot-Aufträge auf verschiedenen Ticks (aber nur zu einem Preis) eröffnet wurden.

In diesem Fall speichert das Programm den richtigen Wert nur für einen letzten Auftrag von 0,1 Lot.

Ich benötige das Programm, um den Stundenwert jedes Auftrags (0,1 Lot) zu speichern, der durch SSL geschlossen wurde.


Hier ist mein Code, den wir ändern müssen.

Ich danke Ihnen für Ihre Hilfe.

int  A2;
int A1;
int A;
int start()                                             
{                                               
int ot = OrdersTotal();                                         
int Ht = OrdersHistoryTotal();
                                                
                                                
if(Bid == iOpen(NULL,PERIOD_H1,0))
if ( A!= Hour() )
{
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
A = Hour();
}                                               
//**************************************************************************************
int Счет=0, Номер=OrdersHistoryTotal()-1;
//int A1=0;
  for( ; Номер>=0; Номер--)
  {
    if(!OrderSelect(Номер, SELECT_BY_POS, MODE_HISTORY)) continue;
    A1=OrderOpenTime();
    if(OrderProfit()>=0) break;
    Счет++;
    if(Счет ==1&&A2!=OrderOpenTime())
    {
    A2=OrderOpenTime();
     OrderSend(Symbol(),OP_SELL,0.3,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
    }
  }
//************************************************************************************** 
return;
}

Hier ein Beispiel für eine Situation, in der mehrere Aufträge auf einen Tick geschlossen werden

        08:51:38.906    2017.03.27 13:09:44  Tester: stop loss #200  at 1.08858 (1.08856 / 1.08858)
2       08:51:38.906    2017.03.27 13:09:44  1 = 1 = 1 = 1 EURUSD,M1: open #214  sell 0.30 EURUSD at 1.08856 sl: 1.09258 tp: 1.08658 ok
0       08:51:38.906    2017.03.27 13:10:28  Tester: stop loss #192  at 1.08879 (1.08877 / 1.08879)
0       08:51:38.906    2017.03.27 13:10:28  Tester: stop loss #193  at 1.08879 (1.08877 / 1.08879)
2       08:51:38.906    2017.03.27 13:10:28  1 = 1 = 1 = 1 EURUSD,M1: open #215  sell 0.30 EURUSD at 1.08877 sl: 1.09279 tp: 1.08679 ok
0       08:51:38.906    2017.03.27 13:10:29  Tester: stop loss #194  at 1.08880 (1.08878 / 1.08880)
 
AlGuru:

Dies ist eine zusätzliche Bedingung. Eine Position wird geschlossen, wenn der Kurs die МА-Linie überschreitet. Manchmal eröffnet der Kurs genau auf der Linie und eröffnet und schließt eine Position bei jedem Tick. Ich habe das Problem gelöst, indem ich die Position vor der nächsten Kerze geschlossen habe.

Ein solches Problem sollte dadurch gelöst werden, dass man überprüft, ob es eine offene und eine geschlossene Position auf eben diesem Balken gibt oder gegeben hat.

Andernfalls werden Sie alles aufstapeln. Die Signalfunktion sollte Signale senden, während die Handelsfunktion bereits die Gültigkeit des Signals prüfen sollte.

 

Hallo. Warum zeigt das Währungspaar Euro gegen US-Dollar 149,16325 statt 1,0616?


Grund der Beschwerde: