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.

Login
Benutzername:
Kennwort:


Statistik
Themen: 3978
Beiträge: 37909
Benutzer: 6.282
Aktive Benutzer: 381
Links: 80
Wir begrüßen unseren neuesten Benutzer: SimplePlan
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 16 Stunden
- SimplePlan
vor einem Tag
- Robbin
vor einem Tag
- forexphong...
vor 3 Tagen
- sunap
vor 4 Tagen
- IInvest84

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

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor einer Woche
Neues Mitglied
 
Registriert seit: Jun 2018
Beiträge: 5
thmatzer befindet sich auf einem aufstrebenden Ast
Standard Wenn Wert bei X war und Y durchkreuzt

Hallo,

ich habe mir einen CCI EA erstellt und habe damit ein kleines Problem.
Mein Wunsch: Wenn zB. der CCI bei -120 war und -100 durchkreuzt soll ein Trade eröffnet werden.

Geschrieben ist es jetzt so wenn der CCI den Wert -100 durchkreuzt (von Unten nach Oben) wird ein Trade eröffnet.
Doch hier entsteht schon das erste Problem: Manchmal wird sogor bereits ein Trade eröffnet wenn der Wert -100 von Oben nach Unten durchkreuzt wird. (Beispiel: CCI geht von +1 auf -100 und bereits hier wird schon ein Trade eröffnet, obwohl der Trade erst eröffnen soll, wenn der CCI von zB -120 durch -100 geht)


Die Lösung wäre wahrscheinlich eine Schleife einzubauen, leider bekomme ich das einfach nicht Fehlerfrei hin, könnte mir da wer helfen?

Hier wäre der Code:

Code:
   //Open Buy Order, instant signal is tested first
   RefreshRates();
   if(Cross(6, iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, CCI_Shift) > Buy_wenn_X_durchkreuzt) //Commodity Channel Index crosses above fixed value
   && Bid > iMA(NULL, PERIOD_CURRENT, MA_Period, MA_Shift, MODE_EMA, PRICE_CLOSE, Shift) + OpenTrade_EntfernungMA * Point() //Price > Moving Average + fixed value
   )
     {
      RefreshRates();
      price = Ask;
      SL = StopLoss * Point(); //Stop Loss = value in points (relative to price)
      if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterMinutes * 60) return; //next open trade after time
      if(!inTimeInterval(TimeCurrent(), TOD_From_Hour, TOD_From_Min, TOD_To_Hour, TOD_To_Min)) return; //open trades only at specific times of the day   
      if(IsTradeAllowed())
        {
         ticket = myOrderSend(OP_BUY, price, TradeSize, "");
         if(ticket <= 0) return;
        }
      else //not autotrading => only send alert
         myAlert("order", "");
      LastTradeTime = TimeCurrent();
      myOrderModifyRel(ticket, SL, 0);
     }
   
   //Open Sell Order, instant signal is tested first
   RefreshRates();
   if(Cross(7, iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, CCI_Shift) < Sell_wenn_X_durchkreuzt) //Commodity Channel Index crosses below fixed value
   && Bid < iMA(NULL, PERIOD_CURRENT, MA_Period, MA_Shift, MODE_EMA, PRICE_CLOSE, Shift) - OpenTrade_EntfernungMA * Point() //Price < Moving Average - fixed value
   )
     {
      RefreshRates();
      price = Bid;
      SL = StopLoss * Point(); //Stop Loss = value in points (relative to price)
      if(TimeCurrent() - LastTradeTime < NextOpenTradeAfterMinutes * 60) return; //next open trade after time
      if(!inTimeInterval(TimeCurrent(), TOD_From_Hour, TOD_From_Min, TOD_To_Hour, TOD_To_Min)) return; //open trades only at specific times of the day   
      if(IsTradeAllowed())
        {
         ticket = myOrderSend(OP_SELL, price, TradeSize, "");
         if(ticket <= 0) return;
        }
      else //not autotrading => only send alert
         myAlert("order", "");
      LastTradeTime = TimeCurrent();
      myOrderModifyRel(ticket, SL, 0);
     }
Mit Zitat antworten
  #2 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 591
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Ich glaube, Du musst ihm nur besser erklären, was er machen soll.

Nimm BID raus und benutz nur die Werte, die der CCI liefert.

Parameter:

extern double CCI_indicator_level1=-100.0;
extern double CCI_indicator_level2=100.0;
extern int InpCCIPeriod=14;
input ENUM_APPLIED_PRICE CCI_Price=PRICE_TYPICAL;


CCI Deklaration:

double CCI=iCCI(_Symbol,_Period,InpCCIPeriod,CCI_Price,1) ;
(//CCI_IL1=-100.0 / CCI_IL2=(+)100.0 ? )




Bedingungen:

if (CCI > CCI_indicator_level1 && CCI < 0.0) long gehn
if (CCI < CCI_indicator_level2 && CCI > 0.0) short gehn

Hab aber ewig nix mit dem CCI am Hut gehabt. Vielleicht verwechsel ich die Lines. Musst mal schaun bzw. testen.

Edit:Erzähl dann bitte mal, wie er so abschneidet.
Mit Zitat antworten
  #3 (permalink)  
Alt vor einer Woche
Neues Mitglied
 
Registriert seit: Jun 2018
Beiträge: 5
thmatzer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Ich glaube, Du musst ihm nur besser erklären, was er machen soll.

Nimm BID raus und benutz nur die Werte, die der CCI liefert.

Parameter:

extern double CCI_indicator_level1=-100.0;
extern double CCI_indicator_level2=100.0;
extern int InpCCIPeriod=14;
input ENUM_APPLIED_PRICE CCI_Price=PRICE_TYPICAL;


CCI Deklaration:

double CCI=iCCI(_Symbol,_Period,InpCCIPeriod,CCI_Price,1) ;
(//CCI_IL1=-100.0 / CCI_IL2=(+)100.0 ? )




Bedingungen:

if (CCI > CCI_indicator_level1 && CCI < 0.0) long gehn
if (CCI < CCI_indicator_level2 && CCI > 0.0) short gehn

Hab aber ewig nix mit dem CCI am Hut gehabt. Vielleicht verwechsel ich die Lines. Musst mal schaun bzw. testen.

Edit:Erzähl dann bitte mal, wie er so abschneidet.

Hab ich versucht, funktioniert leider so nicht.

Jemand eine Lösung?


PS: Ich berichte gerne, wenn ich den EA mal zum laufen bekomme


lg thmatzer
Mit Zitat antworten
  #4 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.025
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

In dem von Dir geposteten Code, ersieht man überhaupt nicht, wann der Trade bei welchem CCI geöffnet wird. D.h. der Code ist so nicht nachvollziehbar. Und solange er das nicht ist, brauchen wir hier auch nicht weiterrätseln.

@MA-EA, das wundert mich, denn Du hast uns monatelang mit Deinem CCI drangsaliert.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #5 (permalink)  
Alt vor einer Woche
Neues Mitglied
 
Registriert seit: Jun 2018
Beiträge: 5
thmatzer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
In dem von Dir geposteten Code, ersieht man überhaupt nicht, wann der Trade bei welchem CCI geöffnet wird. D.h. der Code ist so nicht nachvollziehbar. Und solange er das nicht ist, brauchen wir hier auch nicht weiterrätseln.

@MA-EA, das wundert mich, denn Du hast uns monatelang mit Deinem CCI drangsaliert.

traderdoc
Tut mir leid, hab ich leider vergessen zu erwähnen:

Buy_wenn_X_durchkreuzt = -120
Sell_wenn_X_durchkreuz = +120


Was ich gerne haben will:

Buy:
Sobald der CCI von unten (zb. -150) durch -120 geht, soll ein Buy-Order eröffnet werden

Sell:
Sobald der CCI von oben (zB. +150) durch +120 geht, soll ein Sell-Order eröffnet werden
Mit Zitat antworten
  #6 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.025
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

OK und was ist das für eine Funktion?:

Cross(6, iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, CCI_Shift) > Buy_wenn_X_durchkreuzt)

Was bewirkt die 6 und was wird in dieser Funktion berechnet?

So, wenn Buy_wenn_X_durchkreuzt = -120 sein soll, dann würde

iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, CCI_Shift) > Buy_wenn_X_durchkreuzt

immer dann true werden, solange!! der CCI > Buy_wenn_X_durchkreuzt ist.

Richtig wäre hier:

double CCI_1 = iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, 1);
double CCI_2 = iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, 2);

if (CCI_2 < Buy_wenn_X_durchkreuzt && CCI_1 > Buy_wenn_X_durchkreuzt) {
...
}

D.h. es muss beim Kreuzen immer der Zustand der vorletzen zur letzten geschlossenen Kerze oder der letzten geschlossenen zur aktuellen Kerze (0) betrachtet werden.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #7 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 591
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von thmatzer Beitrag anzeigen
Tut mir leid, hab ich leider vergessen zu erwähnen:

Buy_wenn_X_durchkreuzt = -120
Sell_wenn_X_durchkreuz = +120


Was ich gerne haben will:

Buy:
Sobald der CCI von unten (zb. -150) durch -120 geht, soll ein Buy-Order eröffnet werden

Sell:
Sobald der CCI von oben (zB. +150) durch +120 geht, soll ein Sell-Order eröffnet werden
Bei Sell kannst "+" weg lassen.


Als double deklarieren.


Gibts da überhaupt 150? Wenn dann allerhöchstens 150.0


Erklär mal ganz genau was das Gerät machen soll.


Edit:Und wenn die (vor-) letzte Kerze z.B. nicht 150 sondern kleiner als Deine 120 war?


Und warum eigentlich bei 120? Gut möglich dass da noch ungünstiger oder nen Seitwärtstrend herrscht.
Mit Zitat antworten
  #8 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.025
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

@MA-EA, lies Dir mal mein Post genau durch.
Das hatten wir bei Deinem CCI-Thread alles schon einmal!

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #9 (permalink)  
Alt vor einer Woche
Neues Mitglied
 
Registriert seit: Jun 2018
Beiträge: 5
thmatzer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
OK und was ist das für eine Funktion?:

Cross(6, iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, CCI_Shift) > Buy_wenn_X_durchkreuzt)

Was bewirkt die 6 und was wird in dieser Funktion berechnet?

So, wenn Buy_wenn_X_durchkreuzt = -120 sein soll, dann würde

iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, CCI_Shift) > Buy_wenn_X_durchkreuzt

immer dann true werden, solange!! der CCI > Buy_wenn_X_durchkreuzt ist.

Richtig wäre hier:

double CCI_1 = iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, 1);
double CCI_2 = iCCI(NULL, PERIOD_CURRENT, CCI_Period, PRICE_TYPICAL, 2);

if (CCI_2 < Buy_wenn_X_durchkreuzt && CCI_1 > Buy_wenn_X_durchkreuzt) {
...
}

D.h. es muss beim Kreuzen immer der Zustand der vorletzen zur letzten geschlossenen Kerze oder der letzten geschlossenen zur aktuellen Kerze (0) betrachtet werden.

traderdoc

Danke für deine schnelle Hilfe! Das ist aber leider nicht genau das, was ich wollte. Bei dem Code wird der Trade ja nur um 1 Kerze verschoben, also sobald der CCI -120 kreuzt (egal ob von oben oder von unten) wird ab der nächsten Kerze ein Trade eröffnet.

Mein Vorhaben wäre ja, wenn der CCI sich beispielsweiße von -150 sich in Richtung andere Seite bewegt (sagen wir mal zu +100) und sobald der CCI -120 durchkreuzt, soll der Trade eröffnet werden, und wirklich genau dann und nicht 1 Kerze später etc.

Ist sowas umsetzbar?


lg thmatzer
Mit Zitat antworten
  #10 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.025
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von thmatzer Beitrag anzeigen
Danke für deine schnelle Hilfe! Das ist aber leider nicht genau das, was ich wollte. Bei dem Code wird der Trade ja nur um 1 Kerze verschoben, also sobald der CCI -120 kreuzt (egal ob von oben oder von unten) wird ab der nächsten Kerze ein Trade eröffnet.

Mein Vorhaben wäre ja, wenn der CCI sich beispielsweiße von -150 sich in Richtung andere Seite bewegt (sagen wir mal zu +100) und sobald der CCI -120 durchkreuzt, soll der Trade eröffnet werden, und wirklich genau dann und nicht 1 Kerze später etc.

Ist sowas umsetzbar?

lg thmatzer
Der Code erledigt genau das, was Du willst.
Nein, der Trade würde nur eröffnet werden, wenn der CCI von unten nach oben die -120 kreuzt.
Deshalb habe ich ja such geschrieben, dass Shift = 2 und Shift = 1 benutzt werden soll, wenn auf den Kerzenwechsel geöffnet werden soll oder Shift = 1 und Shift = 0, wenn der CCI der letzten geschlossenen Kerze und der CCI der aktuellen Kerze zum Öffnen dienen soll.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
Antwort

Lesezeichen


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 +2. Es ist jetzt 12:25 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2018 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.
-----------------------------------------------------------------------------------------------------------------------------