Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Mehrere Timeframes traden lassen (http://www.expert-advisor.com/forum/showthread.php?t=6456)

MA-EA 09.07.19 14:59

Mehrere Timeframes traden lassen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo.

Ich versuche CCI, Stochastic und WPR die M15, M30 und H1 Charts handeln zu lassen. Forex. Hab für jeden Chart extra die 3 Indikatoren deklariert und auch für jeden Chart extra die Einstiegsbedingungen mit bools festgelegt.

Die komplette Quell-Datei ist im Anhang.

Code:

//=============================================================================================================
// C C I  D E K L A R A T I O N
//=============================================================================================================

double CCI_M15=iCCI(Symbol(),15,CCI_Period,CCI_Price,1);
double CCI_M30=iCCI(Symbol(),30,CCI_Period,CCI_Price,1);
double CCI_M60=iCCI(Symbol(),60,CCI_Period,CCI_Price,1);

//=============================================================================================================
// S T O C H A S T I C  D E K L A R A T I O N
//=============================================================================================================

double STO_Ma_M15=iStochastic(Symbol(),15,Stoch_K_Period,Stoch_D_Period,Stoch_Slowing,Stoch_MA_Method,Stoch_price_field,MODE_MAIN,1);
double STO_Ma_M30=iStochastic(Symbol(),30,Stoch_K_Period,Stoch_D_Period,Stoch_Slowing,Stoch_MA_Method,Stoch_price_field,MODE_MAIN,1);
double STO_Ma_M60=iStochastic(Symbol(),60,Stoch_K_Period,Stoch_D_Period,Stoch_Slowing,Stoch_MA_Method,Stoch_price_field,MODE_MAIN,1);

double STO_Si_M15=iStochastic(Symbol(),15,Stoch_K_Period,Stoch_D_Period,Stoch_Slowing,Stoch_MA_Method,Stoch_price_field,MODE_SIGNAL,1);
double STO_Si_M30=iStochastic(Symbol(),30,Stoch_K_Period,Stoch_D_Period,Stoch_Slowing,Stoch_MA_Method,Stoch_price_field,MODE_SIGNAL,1);
double STO_Si_M60=iStochastic(Symbol(),60,Stoch_K_Period,Stoch_D_Period,Stoch_Slowing,Stoch_MA_Method,Stoch_price_field,MODE_SIGNAL,1);

//=============================================================================================================
// W P R  D E K L A R A T I O N
//=============================================================================================================

double WPR_M15=iWPR(Symbol(),15,WPR_Period,1);
double WPR_M30=iWPR(Symbol(),30,WPR_Period,1);
double WPR_M60=iWPR(Symbol(),60,WPR_Period,1);

Code:

//=============================================================================================================
// B E D I N G U N G E N  F U E R  O R D E R  S E N D
//=============================================================================================================

//          -100                                                          -80
if(CCI_M15 > CCI_indicator_level_1 && STO_Ma_M15 > STO_Si_M15 && WPR_M15 > WPR_indicator_level_2){
bool M15_Send_Buy=true;
int Close_TF=15;
int Buy_MN=15;}

if(CCI_M30 > CCI_indicator_level_1 && STO_Ma_M30 > STO_Si_M30 && WPR_M30 > WPR_indicator_level_2){
bool M30_Send_Buy=true;
Close_TF=30;
Buy_MN=30;}

if(CCI_M60 > CCI_indicator_level_1 && STO_Ma_M60 > STO_Si_M60 && WPR_M60 > WPR_indicator_level_2){
bool M60_Send_Buy=true;
Close_TF=60;
Buy_MN=60;}


//          +100                                                          -20
if(CCI_M15 < CCI_indicator_level_2 && STO_Ma_M15 < STO_Si_M15 && WPR_M15 < WPR_indicator_level_1){
bool M15_Send_Sel=true;
Close_TF=15;
int Sell_MN=15;}

if(CCI_M30 < CCI_indicator_level_2 && STO_Ma_M30 < STO_Si_M30 && WPR_M30 < WPR_indicator_level_1){
bool M30_Send_Sel=true;
Close_TF=30;
Sell_MN=30;}

if(CCI_M60 < CCI_indicator_level_2 && STO_Ma_M60 < STO_Si_M60 && WPR_M60 < WPR_indicator_level_1){
bool M60_Send_Sel=true;
Close_TF=60;
Sell_MN=60;}


Zum Schließen der Orders müssten diese bools ja reichen, denk ich. Der jeweilige Timeframe zum Schließen wird oben bei den Einstiegsbedingungen fest gelegt.
Code:

//=============================================================================================================
// B E D I N G U N G E N  F U E R  O R D E R  C L O S E
//=============================================================================================================

double STO_Ma_Close=iStochastic(Symbol(),Close_TF,Stoch_K_Period,Stoch_D_Period,Stoch_Slowing,Stoch_MA_Method,Stoch_price_field,MODE_MAIN,1);
double STO_Si_Close=iStochastic(Symbol(),Close_TF,Stoch_K_Period,Stoch_D_Period,Stoch_Slowing,Stoch_MA_Method,Stoch_price_field,MODE_SIGNAL,1);

if(STO_Ma_Close<STO_Si_Close)bool Close_Buy=true;
if(STO_Ma_Close>STO_Si_Close)bool Close_Sel=true;


Befehle zum Order öffnen:
Code:

//=============================================================================================================
// O P E N  O R D E R S
//=============================================================================================================

  if(CB_iTime==Trading_iTime_M15 || CB_iTime==Trading_iTime_M30 || CB_iTime==Trading_iTime_M60){
    if(IsInv==false && RT==true && SPR_AL==true){

      if( open_Buy==true ){
        if( M15_Send_Buy==true || M30_Send_Buy==true || M60_Send_Buy==true )OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Buy_SL,Buy_TP,0,Buy_MN,0,clrBeige);}

      if( open_Sell==true ){
        if( M15_Send_Sel==true || M30_Send_Sel==true || M60_Send_Sel==true )OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Sel_SL,Sel_TP,0,Sell_MN,0,clrBlue);}}}


Zu guter Letzt die Befehle zum Schließen der Orders:
Code:

for(i=OrdersTotal()-1;i>=0;i--){
  if(OrderSelect(i,SELECT_BY_POS)){

    if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol()){
      if( ( Close_Buy==true ) ||(Close_all_Orders_after_Time_O_Clock==true&&TC>CA))OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrDarkGoldenrod);}
       
    if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol()){
      if( ( Close_Sel==true ) ||(Close_all_Orders_after_Time_O_Clock==true&&TC>CA))OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrDarkGreen);}}}

Soweit macht er das im MT4 auch. Allerdings nur ein mal! Er darf erst ab 8:00 Uhr morgens Orders öffnen und tut das auch nur dann. :confused: Er darf bis 16:37 öffnen. Aber mehr als eine Order pro Währungspaar macht er nicht auf. Und ich kann mir beim besten Willen nicht vorstellen, dass er in über 8 Stunden bei 29 WP in jeweils 3 Timeframes keine einzige Handelsmöglichkeit findet. :confused:

MA-EA 11.07.19 18:23

Hat Niemand ne Idee was das Problem ist?

MA-EA 12.07.19 18:36

Liegts vielleicht an
Code:

int deinit(){
return(0);}

dass er nach einem Programm-Durchlauf nix mehr macht?

daybyter 13.07.19 04:14

Gib Dir doch mal vor dem potentiellen Order Öffnen Deine Variablen mit nem Print aus.

MA-EA 14.07.19 21:34

https://docs.mql4.com/common/print
:confused:

Aber ich hab den Code ein paar mal durch geguckt. Scheint Alles in Ordnung zu sein. Ausser das bei Order Send(), Order Modify() und OrderClose() immer kommt "Return Value should be checked" oder sowas in der Art. Hab mal
Code:

return(0)
vor die letzte schließenden Ausführungsklammer geschrieben, die Warnungen kamen aber immer noch. :confused:

Im MT4 kommt auch keine Fehlermeldung, nur manchmal was mit "busy". :confused:

Hat vielleicht die Datei nen Schaden oder der MT4 oder irgendwas Anderes?

daybyter 14.07.19 23:57

Also Dein return 0 im deinit macht wohl keinen Schaden, weil da ja Dein Programm eh schon beendet ist.

Aber die Rückgabewerte von OrderModify usw solltest Du mal auf jeden Fall auswerten, weil da ja ggf Fehlercodes zurückgegeben werden, falls dieser Befehl nicht ausgeführt werden konnte. Anhand des Wertes kannst Du dann sehe, was da evtl. schiefgegangen ist.

MA-EA 15.07.19 21:39

Liste der Anhänge anzeigen (Anzahl: 1)
deinit() hab ich komplett rausgenommen.

Heute hat er total gesponnen. Hat einige Orders geöffnet und gleich wieder geschlossen. :confused: Dann hat er bei ein paar WP Buy und Sell geöffnet, dabei dürfte er eigentlich nur in eine Richtung traden. :confused: Und nach den Orders heute früh nach 7 Uhr hat er bis Feierabend um 17:37 wieder Keine weitere Order geöffnet. Das ist doch Alles nicht normal! :eek: An den verschiedenen Timeframes kanns nicht liegen. Er hat auch bei nur einem TF nur früh geöffnet und dann bis zum Feierabend nich mehr. Hab ich nen Clown im Rechner oder was? Das geht doch Alles gar nicht.

Und haufenweise "Trade Context is busy".

Da muss irgendwas gewaltig nicht stimmen. :confused:

daybyter 15.07.19 21:59

https://www.vantagefx.com/mt4-help-s...-busy-message/

Da stehts. Du musst die Fehlermeldungen von Deinen OrderSend Befehlen checken. Nicht einfach blind die nächste Order raushauen.

Leopold 16.07.19 10:11

@MA-EA: Ich glaube es wär besser du beschäftigst dich mit einen anderen Thema, das Programmieren dürfte einfach nichts sein für dich. Das ist der Eindruck den ich jetzt seit einiger zeit gesammelt habe.

fg Leopold

AVT 16.07.19 14:18

Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe Deine erste Version genommen und eine Debugfunktion eingefügt, Erklärungen stehen im Code. Nun mußt Du anhand der Beispiele das weiterführen/vervollständigen.
Aufzeichnungen findest Du unter
C:/Benutzer/AppData/Roaming/MetaQuotes/Terminal/LangeNummer/MQL4/Logs/JJJJMMDD.log für die Meldung unter "Journal" und für die Meldungen unter "Experten" unter C:/Benutzer/AppData/Roaming/MetaQuotes/Terminal/LangeNummer/logs/JJJJMMDD.log
Die kannst Du dann benutzen, um haargenau zu vergleichen, welche Werte Du hast und Dich dann fragen, warum/woher die Werte kommen, ob sie nach Deiner Planung richtig sind oder welche Werte das eigentlich sein sollten.
Ist halt eine Menge Arbeit. ;) AVT


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:45 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum