|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Mehrere Timeframes traden lassen
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);}}} |
|
|||
Hat Niemand ne Idee was das Problem ist?
|
|
|||
Liegts vielleicht an
Code:
int deinit(){ return(0);} |
|
|||
Gib Dir doch mal vor dem potentiellen Order Öffnen Deine Variablen mit nem Print aus.
|
|
|||
https://docs.mql4.com/common/print
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) Im MT4 kommt auch keine Fehlermeldung, nur manchmal was mit "busy". Hat vielleicht die Datei nen Schaden oder der MT4 oder irgendwas Anderes? |
|
|||
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. |
|
|||
deinit() hab ich komplett rausgenommen.
Heute hat er total gesponnen. Hat einige Orders geöffnet und gleich wieder geschlossen. Dann hat er bei ein paar WP Buy und Sell geöffnet, dabei dürfte er eigentlich nur in eine Richtung traden. 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! 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. |
|
|||
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. |
|
|||
@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 |
|
|||
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 |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|