|
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 |
|
|||
Ich will ja auch gar nichts gesagt haben :-)
Ich glaube, so langsam kriege ich den Dreh raus. Habe mir mal einen EA gebaut, der guckt ob für 5 hintereinanderfolgende Balken sich der Abstand von oberer Linie zu Mittellinie koninuierlich verringert :-) Sowie eine Funktion, die mir bei jedem balken anzeigt wie sich prozentual der Abstand verändert hat :-) Code:
//+------------------------------------------------------------------+ //| Test3.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict datetime LastActiontime; bool BBcontract(){ for(int i=1;i<=5;i++){ double Band_Highcur = iBands(NULL,0,20,2.0,0,PRICE_CLOSE,MODE_UPPER,i); double Band_Modecur = iBands(NULL,0,20,2.0,0,PRICE_CLOSE,MODE_MAIN,i); double Band_Highprev = iBands(NULL,0,20,2.0,0,PRICE_CLOSE,MODE_UPPER,i+1); double Band_Modeprev = iBands(NULL,0,20,2.0,0,PRICE_CLOSE,MODE_MAIN,i+1); if((Band_Highprev-Band_Modeprev)*0.98<(Band_Highcur-Band_Modecur)){ return false; } } return true; } double BBContpercent(){ double Band_Highcur = iBands(NULL,0,20,2.0,0,PRICE_CLOSE,MODE_UPPER,1); double Band_Modecur = iBands(NULL,0,20,2.0,0,PRICE_CLOSE,MODE_MAIN,1); double Band_Highprev = iBands(NULL,0,20,2.0,0,PRICE_CLOSE,MODE_UPPER,2); double Band_Modeprev = iBands(NULL,0,20,2.0,0,PRICE_CLOSE,MODE_MAIN,2); return ((Band_Highcur-Band_Modecur) /(Band_Highprev-Band_Modeprev)); } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- Print("Start Time is= ",TimeCurrent()); LastActiontime=Time[1]; //Print("die Zahl ",1.23456789," gerundet auf die ",_Digits,"te Nachkommastelle ergibt ", roundD(1.23456789)); Print(""); //Print( DoubleToString(Wert, _Digits) ); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(LastActiontime==Time[1]){ return; } else { LastActiontime=Time[1]; } //Print("Last Bar Time is= ",Time[1], "and last Close Price is= ",DoubleToString(Close[1],_Digits)); Print("At the previous Bar, are the Bollinger Bands contracting? ", BBcontract() ); Print("by how much compared to the previous bar? ", DoubleToString(BBContpercent(),2)); Print(""); //+------------------------------------------------------------------+ } //Round a double number down to the last visible digit double roundD(double number){ double n=number*MathPow(10,_Digits); int b=MathRound(n); double c=b; double result=c/MathPow(10,_Digits); return result; } |
|
|||
Eine Frage habe ich doch noch:
Je nahcdem, werde ich eventuell mehrere EAs auf dem selben Chart arbeiten lassen. In jedem Fall wird es aber wohl so kommen dass mehrere EAs Orders öffnen und schließen. Natürlich sollen sich die EAs nicht gegenseitig in die Quere kommen. Daher wäre es praktisch wenn ich in einer zeile den EA einen Trade machen lasse und mir im nächsten befehl direkt die ID oder was auch immer des Trades espeichere (Hauptsache was, was den trade eindeutig identifizierbar macht) Sodass ich später anhand der ID oder Ähnlichem den trade direkt wieder schließen kann. Je nach Lust und Laune bastel ich mir vielleicht auch irgendwann ein Array (wer weiß ob der EA nicht irgendwann mehrere Trades gleichzeitig laufen hat) in der die IDs aller von diesem EA eröffneten Trades gespeichert sind oder so. So oder so will ich mir , direkt nachdem vom EA ein Trade gemacht wurde, diesen irgendwie speichern für später. Gibts da eine gute Variante? Habe gelesen dass man sich eine Lsite aller offenen Trades besorgen kann. Durch die ich mich dann durcharbeiten mpüsste und mit opentimes oder so abgleichen mpsste, welcher der richtige sein könnte. Kann ich nicht irgendwie direkt den Trade abfangen und abspeichern? |
|
||||
Das machst du mit OrderSelect() OrderSymbol() und der Magic Number der Order.
|
|
|||
Ich habe gerade ein kleines Verständnisproblem (hat nicht mal was direkt mit der Programmierung zu tun):
neben anderen Sachen kann ich ja den aktuellen Ask und Bid Preis rausfinden. Der Chart, der gezeichnet wird, hat ja auch einen eigenen Preis, der sich dauernd ändert (und dessen maximum in einer periode den high wert, tief punkt den low wert, etc. ergibt) wenn ich nun eine order öffne, benutze ich ja bei einem buy order den ask price und bei einer sell order den bid preis. aber wenn ich nun einen dieser trades laufen hab und diesen schließen will, welchn preis benutze ich da? sprich: zu welchem reis schließe ich letztlich einen trade? oder ist das nur das "gegenstück" zum eröffnungspreis? (also beio buy order ask zum öffnen, bid zum schließen. und bei sell order umgekehrt) hintergrund ist dass ich mir einen trailing stoploss basteln will, der den stoploss jeden tick , falls erforderlich, nahczieht. zwangsläufig komme ich zu der bedingung OrderStopLoss()<aktuellerPreis-stoplosswert*point diesen aktuellen preis, welcher Wert ist das dann nochmal? |
|
|||
Zitat:
Kaufe zum Ask, dann achte drauf, daß Bid nicht den SL trifft. Verkaufen zum Bid, dann achte drauf, daß Ask den SL nicht trifft. Klar soweit? AVT |
|
|||
Zitat:
Okay, das macht dann sinn :-) |
|
|||
Okay, ich frage mich gerade:
schwankt der spread (=ask-bid preis) eigentlich im Laufe der Zeit? Weil ich überlege gerade schwer wie ich das beim Stoploss ansetze. Meines Wissens nach ist der CHartpreis ja üblicherweise der bid preis. sollte ich den Stoploss am bid oder ask preis besser orientieren? ich meine, wenn sich im laufe der Zeit der spread ändern könnte, insbesondere größeren werden könnte, dann wäre ich ja bei bspw. stoploss 20 pips unter ask preis in Gefahr dass vielleicht der spread zu groß wird und ich rein dadurch ausgestoppt werden würde. Wobei ich gerade eins nicht checke bzw. vermute: Wonach richten sich eigentlich Stoploss und take profit, nahc welchem preis? bspw. bei einem buy trade wäre es irgendwie nur logisch, beides nach dem bid preis zu orientieren. geht der bid preis unter den stoploss, wird die order geschlossen. ebenso wird geschlossen wenn der bid preis den takeprofit wert übersteigt. Das würde dann weiter heißen das nach dem öffnen des trades eignetlich der ask price unwichtig geworden ist und, egal ob takeprofit oder stoploss, sich alles nur noch danach richtig wo der bid preis gerade ist? das heißt, eigentlich müsste ich mich bei meinen überlegungen zur formel für takeprofit und stoploss gar nicht wirklich mit spreead befassen. im endergebnis würde es so oder so nur bedeuten dass der endprofit (egal ob positiv oder negativ) eben noch um die 4 pips spread verringert ist. demnach brauche ich mich eigentlich, solange ich nciht unbedingt zu einem bestimmten kurs einkaufen will, mich nicht näher mit ask preis zu beschäftigen. ich muss das Ganze mal schwer durchdenken... Edit: Sehe ich folgendes recht: wenn ich bei einem Buy Trade einfahc mal gucken will, welchen Endgewinn ich gemacht habe, bestimme ich das dann letztlich über -bidnow-spread+bidlater=(bidlater-bidnow)-spread? wobei bidnow eben der bid preis zum eröffnungszeitpunkt ist, bidlater beim schließungszeitpunkt und spread eben der spread? sprich endgewinn= die bidpreisdifferenz abzüglich dem spread (vorausgesetzt, der verändert sich nicht im laufe der zeit)? |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|