Ich schreibe kostenlos einen Ratgeber - Seite 149

 
DDM77:
Nachdem der Bot getestet wurde, ist eine offizielle Bestellung möglich

Wunderschön gesagt :)

 
Александр:

ein paar Änderungen

Was genau wurde geändert?

 

Hallo, liebe Kollegen.

Ist das Thema noch aktuell? Gibt es Gönner, die bereit sind, den Roboter kostenlos zu entwickeln?

Ich brauche einen Assistenten, der ein guter .mq4-Codierer ist.

Ich bin selbst Programmierer, aber ich kenne mich mit mq4 nicht so gut aus. Es gibt einige Probleme, die ich entweder nicht beschreiben kann, oder sie funktionieren nicht.

Ich habe eine einfache Scalping-Strategie (M15-M30) und zunächst geschrieben Roboter. Sie muss verbessert werden.

Ich werde den Link zu meiner Seite nicht angeben, er wird nicht als meine Werbung angesehen:

RVI 50

EMA 9

EMA 100

Einstiegsbedingungen für eine Long-Position:

Der EMA9 kreuzt den EMA100 von unten nach oben, der RVI muss ebenfalls die Nulllinie von unten nach oben kreuzen oder über der Nulllinie liegen. Wenn diese Bedingungen erfüllt sind, eröffnen wir eine Kaufposition und platziereneinen Stop-Loss 2-3 Punkte unter dem nächsten Minimum. Der Take Profit ist 1,5-2 Mal höher als der Stop Loss.

Einstiegsbedingungen für eine Short-Position:

Der EMA9 kreuzt den EMA100 von oben nach unten, während der RVI-Indikator ebenfalls die Nulllinie von oben nach unten kreuzen oder unter der Nulllinie liegen muss. Wenn diese Bedingungen erfüllt sind, eröffnen wir eine Verkaufsposition. Ein Stop-Loss wird knapp über dem nächsten Höchststand platziert. Der Take Profit ist 1,5-2 Mal höher als der Stop Loss.


Ich habe eine primitive Roboter geschrieben, aber es ist zu verlieren, weil ich etwas, das nicht funktioniert zu beheben haben, plus vielleicht jemand hat einige Ideen, wie man falsche Signale herauszufiltern? (natürlich tun sie das)...

Was funktioniert nicht, und wir müssen es in Ordnung bringen:

1. Stop-Loss und Take-Profit sind auf 100 bzw. 200 festgesetzt, diese Werte sind nicht ausreichend. Wir sollten einen minimalen/maximalen Stop-Loss aus den Candlesticks der letzten X Balken berechnen ( X Balken als Eingabeparameter) und daraus den Gewinn mitnehmen. Ich weiß nicht, wie ich das machen soll. Der wichtigste Punkt, denn der Roboter scheitert genau wegen des Schließens auf dem Stop, obwohl das Signal richtig war und der Gewinn weiter gegangen wäre.

2. Aus irgendeinem Grund öffnet der Roboter (im Tester) mehrere Orders auf demselben Balken innerhalb einiger Ticks, obwohl er prüft, ob er eine Order auf demselben Balken öffnen soll (aus diesem Forum entlehnt), aber es funktioniert nicht. Wir müssen die Prüfung ändern und herausfinden, warum sie nicht funktioniert.

3. Fügen Sie einen Trailing-Stop hinzu (eingehende Parameter des Roboters), wenn der BU ein bestimmtes Niveau erreicht, z. B. 1/2 des berechneten TP (es ist auch möglich, den BU-Faktor in den Parametern festzulegen, z. B. von 0,3 bis 0,7). Separates Trailing ist im Roboter beschrieben (der Code stammt aus diesem Forum), aber es berücksichtigt nicht die BU. Außerdem funktioniert es aus irgendeinem Grund nicht im Strategy Tester, ich muss verstehen, warum.

4. Ich möchte die Geldverwaltung hinzufügen, aber ich weiß nicht, wie. Zum Beispiel das Verbot, mehr als 5 Aufträge in einer Richtung zu eröffnen, wenn diese aktiv sind. Oder verbieten Sie den Handel beim Einstellen des Kontosaldos/-guthabens.

5. Martingal. Filterung von Signalen. (fakultativ).


Das ist alles. Die Roboterdatei kann bei Interesse an einer Zusammenarbeit dem Personal vorgelegt werden. Wenn Sie interessiert sind, bin ich bereit, die Datei des Handelsroboters in einer persönlichen Nachricht zu teilen, wenn ich interessiert bin. Ich selbst werde fertig, dann bleibt nur 1 Punkt.

 

Ich habe Punkt 1 gelöst: Ich habe herausgefunden, wie man den Preis auf dem Balken Geschichte mit iLowest/iHighest )) für das letzte halbe Jahr der Geschichte der Rentabilitätsindikator hat leicht erhöht) auf die gesamte Geschichte ist zu verlieren (

Ich verstehe den Punkt 2 immer noch nicht.

Ich habe begonnen, Trailing zu handhaben, vielleicht werde ich es selbst "gewinnen") sollte die Rentabilität ein wenig wachsen, denn es gibt Geschäfte mit großer Aufnahme, die der Preis einfach nicht erreicht und schließt es durch Stopp, obwohl es etwas Gewinn geben könnte.

 

zum zweiten Punkt:

datetime current, last=0;
int shift=1;

void OnTick()
   {
   current=iTime(symbol,frame,shift);
   //ограничение на торговлю вне начала бара
   if(last==current) return;
   last=current;

   }

zum dritten Punkt:

//трейлинг рыночных ордеров, стоплосс держится на расстоянии Distance от самой экстремальной тени из последних History баров 
int DoTrailOrder(int ePosition, int eMagicNumber, double eDistance, int eHistory, string eSymbol, int eTimeFrame)
   {
   if(!OrderSelect(ePosition,SELECT_BY_POS,MODE_TRADES)) return(1);
   int eType=OrderType();
   if(eType!=OP_BUY && eType!=OP_SELL) return(0);
   if(OrderMagicNumber()!=eMagicNumber) return(0);
   if(OrderSymbol()!=eSymbol) return(0);
   //наблюдаем начиная с бара следующим за баром открытия
   if(iBarShift(eSymbol,eTimeFrame,OrderOpenTime())==0) return(0);
   int eDigits=(int)MarketInfo(eSymbol,MODE_DIGITS);
   double ePoint=MarketInfo(eSymbol,MODE_POINT);
   double eSpread=MarketInfo(eSymbol,MODE_SPREAD);
   double eExtremum;
   if(eType==OP_BUY)
      {
      //стоп устанавливается на расстоянии eDistance от самой низкой тени бара из истории eHistory
      eExtremum=iLow(eSymbol,eTimeFrame,iLowest(eSymbol,eTimeFrame,MODE_LOW,eHistory,1));
      //расстояние от минимума до StopLoss должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderStopLoss(),eDigits)<=eDistance*ePoint) return(0);
      //расстояние от минимума до цены открытия должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderOpenPrice(),eDigits)<=eDistance*ePoint) return(0);
      //новый стоп должен быть не ближе к текущей цене, чем на два спреда
      if(NormalizeDouble(MarketInfo(eSymbol,MODE_BID)+eDistance*ePoint-eExtremum,eDigits)<=2*eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum-eDistance*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrBlue)) return(-1);
      }
   if(eType==OP_SELL)
      {
      //стоп устанавливается на расстоянии eDistance от самой высокой тени бара из истории eHistory
      eExtremum=iHigh(eSymbol,eTimeFrame,iHighest(eSymbol,eTimeFrame,MODE_HIGH,eHistory,1));
      if(NormalizeDouble(OrderStopLoss()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint && OrderStopLoss()!=0) return(0);
      if(NormalizeDouble(OrderOpenPrice()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint) return(0);
      //один спред между Ask и Bid сократился
      if(NormalizeDouble(eExtremum+eDistance*ePoint-MarketInfo(eSymbol,MODE_ASK),eDigits)<=eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum+(eDistance+eSpread)*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrRed)) return(-1);
      }
   return(0);
   }
 

Nachlaufende Stopps können die Erwartung erhöhen, aber sie verbessern nicht die Rentabilität. In einem lauten Markt kann es zu einer Underperformance kommen, wenn der Kurs einen neu nachgezogenen Stopp ausschlägt, obwohl ohne diesen Stopp ein höherer Gewinn möglich gewesen wäre.

Es ist besser, bewusst in die Richtung zu denken, den Handel zu schließen. Sie suchen nach Signalen zum Öffnen, warum dann das Schließen zur Arbitrage nutzen?
 

Danke für die Tipps zu den Punkten 2 und 3, ich werde sie ausprobieren.

Wie für das Schließen, natürlich ist es möglich, zu schließen, wenn das entgegengesetzte Signal auslöst, ich muss denken... was mehr Wirkung geben wird

Ich möchte etwas zu verfolgen, wenn es ein bestimmtes Niveau erreicht. es wird ein Nachteil sein, aber ich will auch nicht zu einem großen Drawdown haben. ich muss darüber nachdenken))

danke

 

Dimitri, zum Thema Trailing - diese Information wurde bereits von vielen Menschen mehr als einmal getestet. Der nachgestellte Code oben ist wahrscheinlich der beste von allen. Aber es ist nicht ohne diesen Nachteil.

Probieren Sie es aus, alles muss ausprobiert werden.

 
Ivan:

Was genau wurde geändert?

Ich habe sie schon einmal gegeben. Hier ist mehr.

Dateien:
 
Дмитрий Хлыстов:

Danke für die Tipps zu den Punkten 2 und 3, ich werde sie ausprobieren.

Wie für das Schließen, natürlich ist es möglich, zu schließen, wenn das entgegengesetzte Signal auslöst, ich muss denken... was mehr Wirkung geben wird

Ich möchte etwas zu verfolgen, wenn es ein bestimmtes Niveau erreicht. es wird ein Nachteil sein, aber ich will auch nicht zu einem großen Drawdown haben. ich muss darüber nachdenken))

danke

Der Markt bewegt sich nicht nach Punkten, d.h. er basiert nicht auf Punkten. Er bewegt sich von Ebene zu Ebene. Die Entfernung wird besser in der Trendzeit gemessen. Vielleicht in Ticks, aber nicht in Pips.