Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36915
Benutzer: 6.077
Aktive Benutzer: 493
Links: 80
Wir begrüßen unseren neuesten Benutzer: Batangenyo
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 11 Stunden
- Batangenyo
vor einem Tag
- Spitzmaus
vor einem Tag
- juleslesqu...
vor 2 Tagen
- hmf44
vor 2 Tagen
- Crossa

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 39
Gesamt: 39
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 06.01.16
Neues Mitglied
 
Registriert seit: Jan 2016
Beiträge: 7
Nici befindet sich auf einem aufstrebenden Ast
Standard Pivot-EA

Hey!

folgendes Problem: Der EA soll eine Long-Order eröffnen, sobald die Pivotlinie von unten nach oben durchkreuzt wird.
Um das dem EA zu sagen, dachte ich mir dass eine Buy-Order eröffnet werden soll, wenn der Askpreis über der Pivotlinie liegt und gleichzeitig die letzten 10 Hochs unter dieser Linie...
Doch leider funktioniert es nicht so wie gedacht. In den ganzen Backtest kann ich nicht nachvollziehen, warum genau jetzt eine Order platziert wird, wenn der Ask-Preis doch unter der Pivotlinie liegt und die letzten 10 Kerzen ebenfalls??

Danke schon mal für Eure Hilfe!




Code:
//Buy Order        
   //Long Signal 1 
      if(Ask>Pivot)
        {
         LongSignal1 = true;
        }
      else
        {
         LongSignal1 = false;
        }
   //Long Signal 2    
      if(iHighest(Symbol(),0,MODE_HIGH,10)<Pivot)
        {
         LongSignal2 = true;
        }
      else
        {
         LongSignal2 = false;
        }
    
   //Buy-Order plaziezen     
     if(LongSignal1=true && LongSignal2==true)
        {
         Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLossLevel,TakeProfitLevel);
        }
  #2 (permalink)  
Alt 06.01.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

1. entweder über die Kreuzung bzgl. des Close der letzten geschlossenen Kerze:

//Buy Order
if(price1 < Pivot && Ask > Pivot) {
Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLoss Level,TakeProfitLevel);
}

Oder
2. rein über das aktuelle Kreuzen mittels des aktuellen Kurses, wie bereits von Dir beschrieben:

//Buy Order
if(Ask > Pivot) {
Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLoss Level,TakeProfitLevel);
}

Dass der EA dann nicht mehrere Orders öffnet, wird über die Abfrage geregelt, ob bereits eine Buy- oder SellOrder offen ist.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 06.01.16
Neues Mitglied
 
Registriert seit: Jan 2016
Beiträge: 7
Nici befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
1. entweder über die Kreuzung bzgl. des Close der letzten geschlossenen Kerze:

//Buy Order
if(price1 < Pivot && Ask > Pivot) {
Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLoss Level,TakeProfitLevel);
}

Oder
2. rein über das aktuelle Kreuzen mittels des aktuellen Kurses, wie bereits von Dir beschrieben:

//Buy Order
if(Ask > Pivot) {
Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLoss Level,TakeProfitLevel);
}

Dass der EA dann nicht mehrere Orders öffnet, wird über die Abfrage geregelt, ob bereits eine Buy- oder SellOrder offen ist.

traderdoc
Würde hier der EA nicht permanent neue Orders eröffnen, solange der Kurs über dem Pivot ist? (bzw. sobald der SL/TP erreicht ist, eine neue Position eröffnen solange der Kurs über dem Pivot ist?)
  #4 (permalink)  
Alt 06.01.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Nici Beitrag anzeigen
Würde hier der EA nicht permanent neue Orders eröffnen, solange der Kurs über dem Pivot ist? (bzw. sobald der SL/TP erreicht ist, eine neue Position eröffnen solange der Kurs über dem Pivot ist?)
Ich hatte doch im letzten Satz geschrieben:

"Dass der EA dann nicht mehrere Orders öffnet, wird über die Abfrage geregelt, ob bereits eine Buy- oder SellOrder offen ist."

D.h. es wird vor der Orderöffnung eingebaut:

if (!BuyOrderOffen) { //d.h. der EA springt nur dann in die Öffnungsroutine, wenn keine BuyOrder offen ist. Das kann nach Belieben verfeinert werden.
.....
}

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 06.01.16
Neues Mitglied
 
Registriert seit: Jan 2016
Beiträge: 7
Nici befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Ich hatte doch im letzten Satz geschrieben:

"Dass der EA dann nicht mehrere Orders öffnet, wird über die Abfrage geregelt, ob bereits eine Buy- oder SellOrder offen ist."

D.h. es wird vor der Orderöffnung eingebaut:

if (!BuyOrderOffen) { //d.h. der EA springt nur dann in die Öffnungsroutine, wenn keine BuyOrder offen ist. Das kann nach Belieben verfeinert werden.
.....
}

traderdoc
Keine Angst, ich habe genau gelesen und diese Funktion war bereits von Anfang an eingebaut.
Ich meine folgendes:
Der Kurs ist über dem Pivot --> Buy-Order wird eröffnet.
Der Kurs erreicht den Takeprofit --> Position wird geschlossen ABER sofort wieder eine neue eröffnet, da der Kurs IMMER NOCH über dem Pivot ist.

Es soll aber nur eine Positon eröffnet werden, wenn das Pivot-Level von unten nach oben durchkreuzt wird...das ist mein Problem.^^
  #6 (permalink)  
Alt 06.01.16
Neues Mitglied
 
Registriert seit: Jan 2016
Beiträge: 7
Nici befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Nici Beitrag anzeigen
Keine Angst, ich habe genau gelesen und diese Funktion war bereits von Anfang an eingebaut.
Ich meine folgendes:
Der Kurs ist über dem Pivot --> Buy-Order wird eröffnet.
Der Kurs erreicht den Takeprofit --> Position wird geschlossen ABER sofort wieder eine neue eröffnet, da der Kurs IMMER NOCH über dem Pivot ist.

Es soll aber nur eine Positon eröffnet werden, wenn das Pivot-Level von unten nach oben durchkreuzt wird...das ist mein Problem.^^
Habs gelöst . Für diejenigen, die es auch interessiert:
Code:
//Buy-Order platzieren wenn Ask über Pivot, aber nicht mehr als 10 Ticks    
     if(Ask>Pivot && Ask<Pivot+0.0001)
        {
         Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,10,StopLossLevel,TakeProfitLevel);
        }
  #7 (permalink)  
Alt 06.01.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Das sehe ich nicht als optimale Lösung:
Code:
//Buy-Order platzieren wenn Ask über Pivot, aber nicht mehr als 10 Ticks    
if(Ask>Pivot && Ask<Pivot+0.0001) {
   Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,10,StopLossLevel,TakeProfitLevel;
}
Weil dann immer wenn der Ask in diesem Kursbereich ist, eine neue BuyOrder geöffnet wird, egal ob schon eine offen ist oder durch SL oder TP geschlossen wurde, sofern der Kurs sich dann wieder in diesen Bereich bewegt.


Bei meinem Code fehlt?? plötzlich die Zuweisung:
double price1 = Close[1];
oder gleich in die Abfrage integrieren.

Code:
if(Close[1] < Pivot && Ask > Pivot) {
   Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLoss Level,TakeProfitLevel);
}
Hier wird nur die Abfrage nach der offenen Order dazugefügt:

Code:
if (!BuyOrderIsOpen) {
   if(Close[1] < Pivot && Ask > Pivot) {
      Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLoss Level,TakeProfitLevel);
   }
}
und nun muß noch die an entsprechender Stelle ermittelte Closezeit "LastOrderCloseTime" der letzten Order verarbeitet werden:

Code:
if (!BuyOrderIsOpen) {
   if (Time[0] > LastOrderCloseTime) {
      if(Close[1] < Pivot && Ask > Pivot) {
         Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLoss Level,TakeProfitLevel);
      }
   }
}
So, nun wird der EA nur einmalig eine BuyOrder öffnen, sobald das Close der letzten geschlossenen Kerze unter dem Pivot lag und der aktuelle Ask erstmalig über dem Pivot liegt. Will man nicht das Close nehmen, sondern das High, dann wird anstelle Close[1] einfach High[1] eingesetzt.
Eine nächstes Open gäbe es nur, wenn auf einer der nächsten Kerzen nach! der OrderCloseKerze wieder der Kurs von unterhalb des Pivot dann über den Pivot erstmalig steigt.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #8 (permalink)  
Alt 06.01.16
Neues Mitglied
 
Registriert seit: Jan 2016
Beiträge: 7
Nici befindet sich auf einem aufstrebenden Ast
Standard

Erstmal vielen Dank für deine Hilfe!!

Leider funktioniert dein Vorschlag nicht, dass nur maximal eine Order eröffnet wird.
Der Tipp mit Close[1] war dagegen genial! Danke!!
Habe es jetzt so gelöst:
Code:
// maximal eine Position offen
      if(OrdersTotal()>0)
       {
         return(0);
       }
//Buy Order        
  //Buy-Order platzieren     

      if(High[1] < Pivot && Ask > Pivot) 
         {
         Order=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLossLevel,TakeProfitLevel);
         }
  #9 (permalink)  
Alt 06.01.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Nici Beitrag anzeigen
Erstmal vielen Dank für deine Hilfe!!
Leider funktioniert dein Vorschlag nicht, dass nur maximal eine Order eröffnet wird.
Warum nicht, was hast Du beobachtet?
Sind die Variablen BuyOrderIsOpen und LastOrderCloseTime ordnungsgemäß! ermittelt worden? Kannst Du den Code dazu hier reinstellen?

Die Abfrage if (!BuyOrderIsOpen) wird definitv! false ergeben, wenn BuyOrderIsOpen = true ist. Und die ist dann true, wenn über OrderSelect() eine
offene BuyOrder, die zum jeweiligen Chart gehört, auf dem der EA läuft, ermittelt wird.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #10 (permalink)  
Alt 07.01.16
Neues Mitglied
 
Registriert seit: Jan 2016
Beiträge: 7
Nici befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Warum nicht, was hast Du beobachtet?
Sind die Variablen BuyOrderIsOpen und LastOrderCloseTime ordnungsgemäß! ermittelt worden? Kannst Du den Code dazu hier reinstellen?

Die Abfrage if (!BuyOrderIsOpen) wird definitv! false ergeben, wenn BuyOrderIsOpen = true ist. Und die ist dann true, wenn über OrderSelect() eine
offene BuyOrder, die zum jeweiligen Chart gehört, auf dem der EA läuft, ermittelt wird.

traderdoc
Hier mein Code
Code:
  for(int i=0;i<OrdersTotal();i++)
{
     
    
  if(OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES)>0)
  {
   BuyOrderIsOpen=true;
  }
  else
    {
     BuyOrderIsOpen=false;
    }
  //LastOrderCloseTime
  
  if(OrderSelect(i,SELECT_BY_TICKET,MODE_HISTORY))
    {
     LastOrderCloseTime = OrderCloseTime();
    }
}     
  //Buy
  if (!BuyOrderIsOpen)
   {
      if (Time[0] > LastOrderCloseTime)
       {
             if(High[1] < Pivot && Ask > Pivot)
              {
                  ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,StopLossLevel,TakeProfitLevel);
              }
       }
    }
Ab einem bestimmten Zeitpunkt werden keine Orders mehr eröffnet, obwohl die Bedingungen erfüllt sind.
Bei meiner Version funktioniert es dagegen.
Vielleicht findest du ja meinen Fehler...
Thema geschlossen

Lesezeichen

Stichworte
long, mql4, pivot long, pivotlinie, programmierung, programmierung metatrader


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------