|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
EA setzt keine Trades ab
Hallo zuammen,
ich habe (versucht) einen Indikator in einen EA zu wandeln, aber er setzt einfach keine Trades ab. Habe ich irgendwo einen grundelgeneden Fehler den ich übersehe? Code:
#include <stdlib.mqh> #property copyright #property link "" #property version "1.00" #property strict #property indicator_buffers 4 #property indicator_chart_window extern double Lot = 0.1; extern double TakeProfit = 0; extern double StopLoss = 0; extern bool AutomaticTrading = true; extern bool SendAlert = true; extern bool SendEmail = false; int AlertMinutesB4Close =x; double ExtHistoBuffer[]; double ExtHistoBuffer2[]; double BlueBar[],RedBar[]; double nPips = x; void SetLoopCount(int loops) { } void SetIndexValue(int shift, double value) { ExtHistoBuffer[shift] = value; } void SetIndexValue2(int shift, double value) { ExtHistoBuffer2[shift] = value; } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //--- return(0); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int start() { int shift = 0; double cnt = 0; double TrStopLevel = 0; double PREV = 0; double pass = 0; SetLoopCount(0); // loop from first bar to current bar (with shift=0) for( shift=Bars-2; shift>=0 ;shift--) { if( (Close[shift] == PREV) ) { TrStopLevel=PREV; } else { if( (Close[shift+1])<PREV && (Close[shift]<PREV) ) { TrStopLevel=MathMin(PREV,Close[shift]*(1+nPips)); } else { if( (Close[shift+1])>PREV && (Close[shift]>PREV) ) { TrStopLevel=MathMax(PREV,Close[shift]*(1-nPips)); } else { if( (Close[shift]>PREV) ) { TrStopLevel=Close[shift]*(1-nPips); } else { TrStopLevel=Close[shift]*(1+nPips); } } } } if( Close[shift] > TrStopLevel && Close[shift+1]<PREV && PREV !=0 ) { if(AutomaticTrading) { OrderSend(OP_BUY,Lot,MarketInfo(Symbol(), MODE_ASK),2,StopLoss,Ask-TakeProfit*Point,Lime); } if(SendAlert) { Alert(Symbol() + " - Look for Buying opportunity soon"); } if(SendEmail) { SendMail("Possible Buy setup on " + Symbol(),"Text"); } RedBar[shift]=Low[shift]; BlueBar[shift]=High[shift]; SetIndexValue(shift, TrStopLevel); } if( Close[shift] < TrStopLevel && Close[shift+1]>PREV && PREV !=0) { if(AutomaticTrading) { OrderSend(OP_SELL,Lot,MarketInfo(Symbol(), MODE_BID),2,StopLoss,Bid-TakeProfit*Point,Red); } if(SendAlert) { Alert(Symbol() + "Text"); } if(SendEmail) { SendMail("Text","Text"); } BlueBar[shift]=Low[shift]; RedBar[shift]=High[shift]; SetIndexValue2(shift, TrStopLevel); } PREV=TrStopLevel; } return(0); } //+------------------------------------------------------------------+ Gruß Gondiego |
|
|||
Ohne den Code vollständig seziert zu haben, fallen diese beiden Zeilen auf, da stimmt so einiges nicht:
OrderSend(OP_BUY,Lot,MarketInfo(Symbol(), MODE_ASK),2,StopLoss,Ask-TakeProfit*Point,Lime); OrderSend(OP_SELL,Lot,MarketInfo(Symbol(), MODE_BID),2,StopLoss,Bid-TakeProfit*Point,Red); 1. keine Angabe des Symbols 2. bei StopLoss müsste der Kurs des StopLoss angegeben werden, was ich bezweifle, da diese Variable so in den Eigenschaften geschrieben steht 3. beim TakeProfit der BuyOrder würde der TP unter!! dem Open der Order liegen - das geht natürlich gar nicht. Besser wäre es, sich an die Vorgabe der Dokumentation zu halten: int OrderSend( string symbol, // symbol int cmd, // operation double volume, // volume double price, // price int slippage, // slippage double stoploss, // stop loss double takeprofit, // take profit string comment=NULL, // comment int magic=0, // magic number datetime expiration=0, // pending order expiration color arrow_color=clrNONE // color ); traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Hallo traderdoc,
danke für deine Antwort. Ja, das sind dann so Sachen, die sieht man nicht mehr wenn man zu lange davor sitzt. Aber....auch durch ändern der Zeilen tut sich nichts...selbst wenn ich sie ohne Verweise schreibe. OrderSend(Symbol(),OP_BUY,0.1,MarketInfo(Symbol(), MODE_ASK),2,0,0,NULL,0,0,Green); OrderSend(Symbol(),OP_SELL,0.1,MarketInfo(Symbol() , MODE_BID),2,0,0,NULL,0,0,Red); Ich habe einfach mal den ursprünglichen Indikator mitangehangen, vielleicht hilft das. Gondiego |
|
|||
OK, dann muss jetzt jemand ran, der viel Zeit hat, um den Fehler zu finden.
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
*Hust...
Hab auch mal kurz einen Blick auf deinen Code im 1 Post geworfen: Code:
#property copyright Code:
int AlertMinutesB4Close =x; ... double nPips = x; Code:
void SetLoopCount(int loops) { } Code:
for(shift=Bars-2; shift>=0 ;shift--) { if(Close[shift] == PREV) TrStopLevel=PREV; else { if((Close[shift+1])<PREV && (Close[shift]<PREV)) TrStopLevel=MathMin(PREV,Close[shift]*(1+nPips)); else { if((Close[shift+1])>PREV && (Close[shift]>PREV)) TrStopLevel=MathMax(PREV,Close[shift]*(1-nPips)); else { if(Close[shift]>PREV) TrStopLevel=Close[shift]*(1-nPips); else TrStopLevel=Close[shift]*(1+nPips); } } } Dort hast du aber einen Fehler (rot hervorgehoben), denn "nPips" initialisierst du oben mit der nicht vorhandenen Variable "x", somit wird die Variable "TrStopLevel" auch nicht "optimal" belegt.
Ich frag mich auch grad, ob du beim Compilieren überhaupt keine Errors und Warnungen erhalten hast... ? Jetzt aber schlafen... |
|
|||
Na siehst Du, @Gondiego, hat sich doch schon jemand gefunden, der einfach zu viel Zeit hat.
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Stimmt. Wenn ihr meinen Namen unter den "Onlineusern" mal nicht seht, das ist ein Bug den Master noch nicht behoben hat.
Bin 24/7 präsent... Spaß bei Seite, mein Post waren die letzten Minuten vorm Schlafen gehen. Da hab ich die mal schnell noch sinnvoll genutzt. |
|
|||
Hallo,
erstmal vielen Danke @next user für deine Mühe. Code:
#property copyright int AlertMinutesB4Close =x; ... double nPips = x; Aber dafür stecke ich einfach zu wenig in der Materie Kann mir denn jetzt jemand sagen, was ich tun muss, damit er als EA einfach nur eine Order, bei Auftreten der Pfeile, absetzt? (Vielleicht hilft ja der Ursprungscode des Indis, welchen ich mit angehangen habe) Wenns garnicht anders geht, bin ich auch bereit, das auf Honorarbasis machen zu lassen. (wenns nicht zu teuer wird ;-P ) Gondiego |
|
|||
Hey Doc, biste da
|
Lesezeichen |
Stichworte |
keine order, keine trades, mql4, order, programmierung, programmierung metatrader, programmierung mql4, trades |
|
|