|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Zitat:
das mit dem Herausfinden ist so ne Sache...ich suche zwar in verschiedenen anderen EA's nach Lösungen, aber finde so gut wie keine. Vieles kann ich mir von der Logik her denken, aber es dann in der Bibliothek zu finden und zu verpacken...! Das ist die Schwierigkeit für mich... Ich möchte eigentlich schon mit nem SL arbeiten...Vll sogar Trailing Stop...So ganz bin ich mir da nicht im reinen was as angeht... Was die Arbeit des Doktors angeht, kann ich nichts verschicken...Ich habe mal in Spanien mit nem Kollegen gewohnt und als ich zurück musste (AG ist pleite gegangen) hatte er (der Kollege) bei seiner Heimreise quasi alles was aus Papier war vernichtet...Ergo war dieses "Heftchen" auch in der Tonne...Leider auch einiges anderes Der Grundgedanke beim MA ist aber folgender... Der Ausbruch in einen Trend erfolgt erst dann, wenn der MA in den vorherigen Perioden eine Richtung angezeigt hat...also MA1[1] > MA1[2] und das Low[1] der Kerze > MA1[1] liegt. Ebenso sollte der SK der dieser Kerze > sein als das opening...das wäre ein Kauf. Jeder Berührung des MA's ist ein Rauschen im Markt...Der Trend wird erst durch das o.g. Szenario bestätigt... Es gab in diesem Heft auch noch einige andere System auf Basis des MA die schon was komplexer waren, aber leider kann ich dazu nichts mehr sagen...das ist alles schon ca 3 Jahre her...
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Na,
jetzt hast Du aber ein bissel geschummelt In vielen EAs findest Du Schleifen, die auf HistoryTotal() und OrdersTotal() beruhen. That it's! <<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>> int zähler=0 for(int i=HistoryTotal()-1;i>=0;i--) { Dein weiterer Code selektiert den Trade bzgl i Dein weiterer Code selektiert ob Sell oder Buy oder Beides, ggf. MagicNumber berücksichtigt dann Zähler ggf. erhöhen } zähler hat die Anzahl dessen was Du brauchst <<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>> Und schon wieder ein Problem gelöst. Nun das Andere: Du schreibst: Ausbruch = ( MA1[1] > MA1[2] && Low[1] > MA1[1] ) Ich versuche mal zu rekonstruieren: MA1[1] kommt aus einem Buffer, also vermutlich von einem Indikator. im EA würde ich das ungefähr so machen: int peri=Period(); if(peri==PERIOD_H1) peri=PERIOD_H4; double dMa1=iMA(Symbol(),peri,.....,1) //selbst komplettieren, da ich nicht double dMa2=iMA(Symbol(),peri,.....,2)//weiß ob EMA,SMA,SMMA, etc... dann geht bool AusbruchLong = ( dMa1 > dMa2 && Low[1] > dMa1 ); bool AusbruchShort = ( dMa1 < dMa2 && High[1] < dMa1 ); Das ist nur ein Beispiel, erinnert mich aber an ähnlichen Code den ich schon im Kopf hatte , weil das mit Trendtrading, wie kürzlich vom Kollegen hier empfohlen, was zu tun hat. Wenn Du im Programmieren geübt bist, dann ist auch bei Dir das Proggi im Kopf fast fertig, bevor Du mit der Umsetzung anfängst. Gruß Joe PS: und bitte nicht schummeln |
|
|||
Zitat:
Hi Joe, du hast noch vergessen, dass der Candle ebenfalls die Richtung des Tre3nds haben soll...der MA ist ein einfacher auf SK Basis ohne verschiebung...von anderen Formen wie EMA oder WMA etc halte ich nicht so viel...Mag sicherlich klappen , aber ich bin ein Freund des KISS...Keep it simple stupid... Einen Trend zu handeln ist einfacher als einen Tradingmarkt...geht zwar auch, aber eigentlich ist es anders angenehmer... Für mich ist es glaube ich schon sehr schwer Übung ins Programmierung zu bekommen. Mal sehen wie lange es dauert bis ich mal wirklich was auf die Beine stellen kann und vor allem stolz darauf bin, dass es klappt wie ich es mir vorstelle... VG sendet Marc
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Wenn Du Deinen letzten Programmstand als File anhängst, kann ich ja mal drüberlesen.
Wenn Du MA[x] schreibst, darf der Leser davon ausgehen, das Du einen EMA meinst bool AusbruchLong = ( dMa1 > dMa2 && Low[1] > dMa1 && Low[0] > dMa1 ); bool AusbruchShort = ( dMa1 < dMa2 && High[1] < dMa1 && High[0] < dMa1 ); Hauptsache, Du hast es nicht vergessen Das Teil müßte ja schon halbwegs laufen. Laß mal schauen was Du fabriziert hast, Joe |
|
|||
Zitat:
bool AusbruchLong = ( dMa1 > dMa2 && Low[1] > dMa1 && Low[1] > dMa1 ); bool AusbruchShort = ( dMa1 < dMa2 && High[1] < dMa1 && High[1] < dMa1 ); ...sein? Ich meinte in allen Fällen den SMA. Fabriziert habe ich es in meinem Kopf, nur alles da rein zu bekommen,d ass es auch wirklich klappt...das wäre mein Ziel... Kann der dMa1 nicht auch folgendermaßen verglichen werden? bool AusbruchLong = (dMa1[1] > dMa1[2] && Low[1] > dMa1[1] && Close[1] > Open[1]); bool AusbruchShort = (dMa1[1] < dMa1[2] && High[1] < dMa1[1] && Open[1] > Close[1]); Ich werde mich morgen vormittag mal dran setzen und mal was posten...Auf der Arbeit darf ich leider nicht ;-)
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Zitat:
Da ist es besser und universeller dMa1..2 mal schnell mit iMA(...MODE_SMA...) zu füttern. Daher meine Umstellung zu Deinem ursprünglichen Proggi. Gruß Joe |
|
|||
Oh man ich schaffe das iwie nicht...komme nicht mehr weiter...
Ich verhake mich da total...
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
So schaut esw nun erst mal aus:
//+------------------------------------------------------------------+ //| Marcs erster EA.mq4 | //| Der Marc | //| Es gibt gar keinen Link dazu | //+------------------------------------------------------------------+ #property copyright "Der Marc" #property link "Es gibt gar keinen Link dazu" extern double dLots=0.02; extern int iStopLoss=250; extern int iTakeProfit=250; extern int iSlippage=30; extern int iMaxTrades=1; extern int iMagicNumber=112233; int iTradeSignal=0; int iOpenBuySignal=10; int iCloseBuySignal=-10; int iOpenSellSignal=20; int iCloseSellSignal=-20; int iNoSignal=-1; double dMovingAvg1=0; int iTotalTrades; int iOrderOpenStatus; int iErrorNumber; string strErrorMessage; //------------------------------------------------------------------------------------------- int start() { int peri=Period(); if(peri==PERIOD_H1); double dMa1=iMA (Symbol(),0,7,0,MODE_SMA,PRICE_CLOSE,0); bool AusbruchLong = (( Low[1] > dMa1[1]) && (Open[1] < Close[1]) && (dMa1[1] > dMa1[2] )); bool AusbruchShort = (( High[1] < dMa1[1]) && (Close[1] < Open[1] && (dMa1[1] < dMa1[2] )); // Buy-Order ausführen iTotalTrades=OrdersTotal(); if ((iTradeSignal == iOpenBuySignal) && (iTotalTrades < iMaxTrades)) { double dBSL=Ask-(iStopLoss*Point) double dBTP=Ask+(iTakeProfit*Point); iOrderOpenStatus=OrderSend (Symbol(), OP_BUYSTOP,dLots, High[1], iSlippage, dBSL, dBTP, "Marcs erster EA",iMagicNumber, TimeCurrent()+7200,Green); if (iOrderOpenStatus<0) { iErrorNumber=GetLastError(); Print ("Order fehlgeschlagen!: ", iErrorNumber); return; } } // Sell-Order ausführen iTotalTrades=OrdersTotal(); if ((iTradeSignal == iOpenSellSignal) && (iTotalTrades < iMaxTrades)) { double dSSL=Bid+(iStopLoss*Point) double dSTP=Bid-(iTakeProfit*Point); iOrderOpenStatus=OrderSend (Symbol(), OP_SELLSTOP,dLots, Low[1], iSlippage, dSSL, dSTP, "Marcs erster EA",iMagicNumber,TimeCurrent()+7200,Red); if (iOrderOpenStatus<0) { iErrorNumber=GetLastError(); Print ("Order fehlgeschlagen!: ", iErrorNumber); return; } } return(0); } //+------------------------------------------------------------------+ Ich muss jetzt noch heraus finden in wie weit die Möglichkeit besteht die Handelszeit einzusachränken...Beispielsweise ab 07:00 - 21:00... Gibt es ein Forum wo evtl verschiedene Systeme mal auseinander genommen werden und wo der Quellcode intensiv diskutiert bzw beschrieben wird? VG und Danke Marc
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
ich bekomme übrigens bei dem Quellcode oben noch weitere Fehlerhinweise auf nicht definierte Variablen...jeweils bei den TakeProfits und Stoploss...
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Hallo,
viele, viele Fehler in Syntax und was dem MA angeht auch. Du kannst kein MA Array benutzen, wenn Du keines erzeugst. Daher hatte ich die beiden benötigten MA-Werte auch über die Methode iMA(...) erzeugt, aber nicht als Array. Wenn Du bastelst, dann bitte nur Stück für Stück. Beim ersten neu auftretenden Fehler, siehst Du wenn Du compilierst, nicht einfach weitermachen, sondern erst den Fehler suchen(Zeile und Fehler wird ja unten angezeigt) und fixen und lernen(Syntax von C lernen). //+------------------------------------------------------------------+ //| Marcs erster EA.mq4 | //| Der Marc | //| Es gibt gar keinen Link dazu | //+------------------------------------------------------------------+ #property copyright "Der Marc" #property link "Es gibt gar keinen Link dazu" extern double dLots=0.02; extern int iStopLoss=250; extern int iTakeProfit=250; extern int iSlippage=30; extern int iMaxTrades=1; extern int iMagicNumber=112233; int iTradeSignal=0; int iOpenBuySignal=10; int iCloseBuySignal=-10; int iOpenSellSignal=20; int iCloseSellSignal=-20; int iNoSignal=-1; double dMovingAvg1=0; int iTotalTrades; int iOrderOpenStatus; int iErrorNumber; string strErrorMessage; //------------------------------------------------------------------------------------------- int start(){ int peri=Period(); if(peri==PERIOD_H1){ double dMa.1=iMA(Symbol(),0,7,0,MODE_SMA,PRICE_CLOSE,1); double dMa.2=iMA(Symbol(),0,7,0,MODE_SMA,PRICE_CLOSE,2); bool AusbruchLong = ( Low[1] > dMa.1 && Open[1] < Close[1] && dMa.1 > dMa.2 ); bool AusbruchShort = ( High[1] < dMa.1 && Close[1] < Open[1] && dMa.1 < dMa.2 ); // Buy-Order ausführen iTotalTrades=OrdersTotal(); if ((iTradeSignal == iOpenBuySignal) && (iTotalTrades < iMaxTrades)){ double dBSL=Ask-(iStopLoss*Point); double dBTP=Ask+(iTakeProfit*Point); iOrderOpenStatus=OrderSend (Symbol(), OP_BUYSTOP,dLots, High[1], iSlippage, dBSL, dBTP, "Marcs erster EA",iMagicNumber, TimeCurrent()+7200,Green); if (iOrderOpenStatus<0){ iErrorNumber=GetLastError(); Print ("Order fehlgeschlagen!: ", iErrorNumber); return; } } // Sell-Order ausführen iTotalTrades=OrdersTotal(); if ((iTradeSignal == iOpenSellSignal) && (iTotalTrades < iMaxTrades)){ double dSSL=Bid+(iStopLoss*Point); double dSTP=Bid-(iTakeProfit*Point); iOrderOpenStatus=OrderSend (Symbol(), OP_SELLSTOP,dLots, Low[1], iSlippage, dSSL, dSTP, "Marcs erster EA",iMagicNumber,TimeCurrent()+7200,Red); if (iOrderOpenStatus<0){ iErrorNumber=GetLastError(); Print ("Order fehlgeschlagen!: ", iErrorNumber); return; } } } return(0); } //+------------------------------------------------------------------+ Ob der Code so sinnvoll ist habe ich nicht verifiziert, aber offensichtliche Syntax-Fehler sind raus und IMA gefixt. Gruß Joe PS: Ich hoffe nicht das Du am saufen bist. Vielleicht mal den Spruch ändern? |
Lesezeichen |
|
|