|
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 |
|
|||
@MA_EA:
Achso, hab ich dann falsch verstanden. Aber zwei Tage ist viel zu kurz. Pack den EA mal auf ne VPN und lass ihn ein paar Monate laufen. Dann hast Du statistische Ergebnisse mit denen man was anfangen kann. @Kronenchakra: Die Strategie mit den 3 Durchschnitten ist so neu nicht, hat man auch schnell automatisiert. Nur macht man in der Regel während der vielen Seitwärtsphasen mehr Verlust als in den Trendphasen Gewinn denke ich. |
|
|||
Hallo.
Hab seit einiger Zeit Versuche unternommen, den Abstand zwischen Kurs und GDs und auch zwischen GDs zu verkürzen. 1. hab ich den Abstand zwischen dem Open des Kurses und denen der GDs ausrechnen lassen. Diese dann zu den Close Werten der GDs dazu addiert. Aber wer weiß, ob die Open Kurse ein guter Anhaltspunkt sind? 2. hab ich High + Close + Low Bar 1 ausrechnen lassen. Für den Kurs und für die 2 bzw. 3 GDs. Dann die Abstände zwischen diesen Durchschnitten (Typical Price) der Kurseund GDs ausgerechnet. Die Ergebnisse dann zu den Close Werten der GDs dazu addiert. Denke, dass das besser ist, weil der Typical Price mehr aussagt. Ausserdem wird dann Alles noch mal ein kleines Bißchen geglättet. Ist allerdings wieder mehr Arbeit. Aber irgendwie muss es ja möglich sein, den Kurs zu glätten, ohne dass die GDs stundenlang hinter her hinken. Dann hab ich mal gelesen, dass man Werte einfach mit bestimmten anderen Werten ersetzen kann. Was mich wieder über die Shift Funktion von GDs nachdenken lässt... |
|
|||
Der schnellste GD den ich gefunden habe und auch verwende.
Ist halt für den MT5, aber gibt's sicher auch für MT4. Ist sogar die Berechnungsmethode angegeben! Seltenheit! Code:
//+------------------------------------------------------------------+ //| ZeroLag_MA_Mono.mq5 | //| Copyright © 2006, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ //| Formula: | //| ZeroLAG MA(i) = 2*MA(Price, P1, i) - MA(MA( Price, P1, i), P2, i)| //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property description "An attempt to create the moving average with zero lag" #property version "1.00" #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 1 #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 #property indicator_label1 "ZeroLag_MA_Mono" #include <SmoothAlgorithms.mqh> CXMA XMA1,XMA2; input Smooth_Method MA_Method1=MODE_EMA_; input int Length1=5; input int Phase1=5; input Smooth_Method MA_Method2=MODE_EMA_; input int Length2=5; input int Phase2=5; input Applied_price_ IPC=PRICE_TYPICAL_; // Anwenden auf Preis input int Shift=0; input int PriceShift=0; double ZeroLAG_MA[]; double dPriceShift; int min_rates_total, min_rates_1, min_rates_2; void OnInit() { min_rates_1=XMA1.GetStartBars(MA_Method1, Length1, Phase1); min_rates_2=XMA2.GetStartBars(MA_Method2, Length2, Phase2); min_rates_total=min_rates_1+min_rates_2+1; XMA1.XMALengthCheck("Length1", Length1); XMA2.XMALengthCheck("Length2", Length2); XMA1.XMAPhaseCheck("Phase1", Phase1, MA_Method1); XMA2.XMAPhaseCheck("Phase2", Phase2, MA_Method2); dPriceShift=_Point*PriceShift; SetIndexBuffer(0,ZeroLAG_MA,INDICATOR_DATA); PlotIndexSetInteger(0,PLOT_SHIFT,Shift); PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total); PlotIndexSetDouble (0,PLOT_EMPTY_VALUE,EMPTY_VALUE); string shortname; string Smooth1=XMA1.GetString_MA_Method(MA_Method1); string Smooth2=XMA1.GetString_MA_Method(MA_Method2); StringConcatenate(shortname,"ZeroLag_MA_Mono(",Length1,", ",Length2,", ",Smooth1,", ",Smooth2,")"); IndicatorSetString (INDICATOR_SHORTNAME,shortname); IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1); } int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { if(rates_total<min_rates_total) return(0); double price,x1xma,x2xma; int first,bar; if(prev_calculated>rates_total || prev_calculated<=0) first=0; else first=prev_calculated-1; for(bar=first; bar<rates_total && !IsStopped(); bar++) { price=PriceSeries(IPC,bar,open,low,high,close); x1xma=XMA1.XMASeries(0 ,prev_calculated,rates_total,MA_Method1,Phase1,Length1,price,bar,false); x2xma=XMA2.XMASeries(min_rates_1,prev_calculated,rates_total,MA_Method2,Phase2,Length2,x1xma,bar,false); ZeroLAG_MA[bar]=2*x1xma-x2xma+dPriceShift; } return(rates_total); } |
|
|||
Hat Jemand Tips bezügl. einem 3 GD System?
SMA, 1H, FX. Hab schon 3 6 9 3 6 10 3 6 12 4 9 18 versucht. Hat irgendwie Alles nicht so richtig überzeugt. Weiß Jemand wie sich der M15 macht? |
|
|||
3 GDs, find ich recht gut, aber nicht mit SMAs
https://www.youtube.com/watch?v=0aFa...Is-GA&index=10 Bin draufgekommen daß mein Indi ident zum DEMA (Double Exponential MA) ist. LG |
|
|||
Hallo.
Irgendwo kommen Ein- und Ausstiegs-Bedingungen sich in die Quere, so dass irgendwie haufenweise Trades geöffnet und kurz danach wieder geschlossen werden. Code:
//Kurs double HP1 = iHigh(Symbol(), TimeFrame, 1); double CP1 = iClose(Symbol(), TimeFrame, 1); double CP2 = iClose(Symbol(), TimeFrame, 2); double LP1 = iLow(Symbol(), TimeFrame, 1); //GDs double H_MA = iMA(Symbol(), TimeFrame, High_MA, GD_Shift, GD_Type, PRICE_HIGH, 1); double C_MA = iMA(Symbol(), TimeFrame, Close_MA, GD_Shift, GD_Type, PRICE_CLOSE, 1); double L_MA = iMA(Symbol(), TimeFrame, Low_MA, GD_Shift, GD_Type, PRICE_LOW, 1); Code:
//Open Trade if (!IsInvested){ if (TC>F && TC<T && S<=MS && CP1>C_MA && LP1>L_MA) OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, Name + " Buy(#" + MagicNumber + ")", MagicNumber, 0, Blue); if (TC>F && TC<T && S<=MS && CP1<C_MA && HP1<H_MA) OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, Name + " Sell(#" + MagicNumber + ")", MagicNumber, 0, Red);} //------------------------------------------------------------------------------------------------------------- //Close Trade if (IsInvested){ for (i=OrdersTotal()-1; i>=0; i--){ if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if (OrderType()==OP_BUY && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()){ if((CP1<C_MA && LP1<L_MA) || (CAA=true && TC>CA) || (CLTF=true && CP1<CP2 && O_P<0.0)) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, DarkBlue);} if (OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()){ if((CP1>C_MA && HP1>H_MA) || (CAA=true && TC>CA) || (CLTF=true && CP1>CP2 && O_P<0.0)) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, FireBrick);}}}} |
|
|||
Wahrscheinlich liegt es an der Variablen IsInvested, die wird nirgendwo verändert.
In MQL5 könnte man mit PositionSelect(_Symbol) feststellen ob eine Pos offen ist. LG Otto |
|
|||
Hab wohl eher nen paar Bedingungen verdreht. Jetzt funkts.
Jedenfalls wird nur noch zu jeder vollen H getradet. Allerdings bin ich beim Ausstieg nicht sicher. Derzeit wird ein Buy gemacht, wenn Close>Close GD und High>High GD Ich denke man müsste schon schließen, wenn High<High GD. Bis jetzt muss auch Close<Close GD sein, um einen Buy zu closen. Aber ich glaub, das ist zu spät. |
|
|||
Moin.
Im Anhang mal ein Versuch. Will im BT nicht traden. Müsste aber eigentlich funktionieren. Kann aber nix versprechen. Ist wie gesagt ein Test. Wär dankbar wenn Ihr mal bei Euch testen und sagen könntet, ob er überhaupt tradet. Und wenn ja wie gut/schlecht. |
Lesezeichen |
Stichworte |
expert advisor, gleitender durchschnitt, mql4, programmierung, programmierung metatrader, programmierung mql4, trading |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|