Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1341

 
DanilaMactep:

ICH HABE DEN PREIS BERECHNET, UM DEN OFFSET SO ZU SETZEN (MAKAR, DU BIST ZUMINDEST NICHT MEIN TYP, DER SICH ANFASSEN LÄSST;-))

WIE ÜBERPRÜFE ICH, OB DER ERMITTELTE WERT IN DEN ZULÄSSIGEN BEREICH FÄLLT? ICH VERSTEHE NICHT, WAS ICH TUN SOLL, UND WIE STELLE ICH SICHER, DASS DER AUFTRAG TROTZDEM ZUM KLEINSTMÖGLICHEN ABSTAND ERÖFFNET WIRD, WENN DER BERECHNETE WERT UNTER DEM ZULÄSSIGEN WERT LIEGT?

Versuchen Sie dies,

Ich denke, Sie werden es herausfinden.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2013                                                     |
//|  Описание : Выполняет корректирование ценовых уровней под STOPLEVEL.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование торгового инструмента                                 |
//|    op - торговая операция                                                  |
//|    pp - цена открытия/установки                                            |
//|    sl - ценовой уровень StopLoss                                           |
//|    tp - ценовой уровень TakeProfit                                         |
//+----------------------------------------------------------------------------+
void CorrectingPrice(string sy, int op, double& pp, double& sl, double& tp) {
  if (sy=="" || sy=="0") sy=Symbol();
  RefreshRates();
  int    di=MarketInfo(sy, MODE_DIGITS);
  int   msl=MarketInfo(sy, MODE_STOPLEVEL);
  int    sp=MarketInfo(sy, MODE_SPREAD);
  double mp=MarketInfo(sy, MODE_POINT);
  double pa=MarketInfo(sy, MODE_ASK);
  double pb=MarketInfo(sy, MODE_BID);
  double ds=NormalizeDouble(pp-sl, di);
  double dp=NormalizeDouble(pp-tp, di);

  if (msl==0) msl=2*sp;
  switch (op) {
    case OP_BUY:
      pp=pa;
      sl=pp-ds;
      tp=NormalizeDouble(pp-dp, di);
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELL:
      pp=pb;
      sl=NormalizeDouble(pp-ds, di);
      tp=pp-dp;
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_BUYLIMIT:
      if (pp>pa-msl*mp) {
        pp=pa-msl*mp;
        sl=pp-ds;
        tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_BUYSTOP:
      if (pp<pa+msl*mp) {
        pp=pa+msl*mp;
        if (sl>0) sl=pp-ds;
        if (tp>0) tp=NormalizeDouble(pp-dp, di);
      }
      if (sl>pp-msl*mp) sl=pp-msl*mp;
      if (tp>0 && tp<pp+msl*mp) tp=pp+msl*mp;
      break;
    case OP_SELLLIMIT:
      if (pp<pb+msl*mp) {
        pp=pb+msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    case OP_SELLSTOP:
      if (pp>pb-msl*mp) {
        pp=pb-msl*mp;
        sl=NormalizeDouble(pp-ds, di);
        tp=pp-dp;
      }
      if (sl>0 && sl<pp+msl*mp) sl=pp+msl*mp;
      if (tp>pp-msl*mp) tp=pp-msl*mp;
      break;
    default:
      Message("CorrectingPrice(): Неизвестная торговая операция!");
      break;
  }
}
 
Alekseu Fedotov:

Versuchen Sie dies,

Ich denke, Sie werden den Dreh schon herausbekommen.

Alexey, vielen Dank für dieses Stück Code. Aber leider kann ich wegen der Folgen eines Schlaganfalls den Code anderer Leute nicht lesen. Darf ich Sie um eine Anleitung bitten, wie dieser Code zu verwenden ist, und um eine Empfehlung, woran er zu befestigen ist und wie er zu verwenden ist?

Folgendes ist mir in den Sinn gekommen. Ich suchte nach einem Mindestpreis für x-bars wie diesen

  int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          double min_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МИНИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        

aber das ist nicht korrekt, weil ich min Preis aihai zuweisen, nicht niedrig. korrigiert für niedrig und der Fehler ist weniger, aber immer noch auftreten(((

Wenn es also nicht schwierig ist, schicken Sie uns eine Anleitung, wie man ein Stück vergünstigten Code verwendet...

 

Hallo zusammen, ich habe versucht, die Ratschläge, die Sie zu meinem letzten Beitrag geschrieben haben, anzuwenden, aber es hat nicht geholfen. Ich erhalte immer noch den Fehler 130L, aber das liegt wahrscheinlich nicht am Stop-Loss selbst, sondern am offenen Kurs. Der Eröffnungskurs für einen Kauf- und einen Verkaufsstopp wird ermittelt, indem der Höchst- bzw. Tiefstkurs für x Kerzen auf diese Weise bestimmt wird.

          int max_bars= iHighest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double max_Price=iHigh(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          max_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          );  //КОНЕЦ ПОЛУЧЕНИЯ ДАННЫХ ДЛЯ ПОКУПАК*********** 
          
          //----ПОЛУЧЕНИЕ ДАННЫХ ДЛЯ ОТЛОЖЕННЫХ ПРОДАЖ
          
          
                    int min_bars= iLowest(NULL, // ТЕКУЩИЙ СИМВОЛ
          PeriodForWork_pending_orders,// ТФ ДЛЯ ПОИСКА МАКСИМУМА  УСТАНОВКИ ОТЛОЖЕННОГО ОРДЕРА
          MODE_HIGH,// ИЩЕМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ХАЙ
          range_max // ДИАПОЗОН ПОИСКА ИЗ ЭН СВЕЧЕЙ
          ); // ПОЛУЧАЕМ НОМЕР СВЕЧИ НА КОТОРОЙ ИМЕЕТСЯ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ
          double min_Price=iLow(Symbol(),// СИМВОЛ ТЕКУЩЕГО ИНСТРУМЕНТА(НА КОТОРОМ РАБОТАЕТ ГРААЛЬ;-)
          PeriodForWork_pending_orders, // ТФ НА КОТОРОМ АСЧИТЫВАЕМ ЦЕНУ МАКСИМУМА
          min_bars//  НА КАКОМ БАРЕ БЫЛ МАКС ТОТ И ПОДСТАВИМ;)
        
          
          ); // КОНЕЦ АЙЛОУ

Das Problem liegt nicht am Stop, da ich genau den gleichen Stop und atp verwende und die Marktaufträge ohne Fehler öffnen. Das bedeutet, dass das Problem bei der Berechnung des Preises für die Einstellung eines schwebenden Auftrags liegt. Ich öffne die Aufträge selbst wie folgt

OrderSend(Symbol(),OP_SELLSTOP,lot,min_Price,slippages,min_Price+sl , min_Price-tp ,comment_ao_otloj_sell); // ОТКРКЫВВАЕМ ОТЛОЖЕННЫЙ СЕЛ ОРДЕР

OrderSend(Symbol(),OP_BUYSTOP,lot,max_Price,slippages,max_Price-sl,max_Price+tp ,comment_ao_otloj_buy,magik_number,TimeCurrent()+order_life_time); // ОТКРЫВАЕМ ОТЛОЖЕННЫЙ БАЙ ОРДЕР


P/S und ich habe vergessen, Ihnen zu sagen, dass ich Pending Orders verwenden möchte, um eine Art Preisfilter für die Eröffnung einer Position zu simulieren, d.h. wenn der Preis in die richtige Richtung geht, wird eine Pending Order ausgelöst, aber wenn nicht, wird sie storniert und ich bin aus dem Markt. Bitte, was mache ich bei der Festlegung des Eröffnungskurses falsch? Und vielleicht gibt es eine einfachere Lösung für den Preisfilter bei Geschäften?

p / s sehr freundlich, wenn Sie einen Code, der angewendet werden kann, schreiben Sie eine detaillierte Anleitung für sie, wie ich bin mit ernsthaften Schwierigkeiten beim Lesen des Codes. Eine genaue Anleitung, wozu dieser Code dient und wie er angewendet werden kann (um ihn an eine Variable anzuhängen und etwas damit zu tun oder etwas anderes, und bitte schreiben Sie Ihre Kommentare zum Code verständlicher). Vielen Dank im Voraus ;-) P.S. Wer Wissen hat und Erfahrung hat, sollte nicht vorbeigehen, sondern brüderlich helfen - nicht rumvögeln ;-), um die Grals-OP zu beenden ;-).

 
Kolleginnen und Kollegen!

die mit Objekten gearbeitet haben. Bitte senden Sie mir ein Beispiel für einen Code, in dem ein manuell gezeichnetes Dreieck, eine Ellipse oder ein Quadrat (ich glaube, es hat einen Namen auf dem Chart) eine Aktion ausführt - zum Beispiel eine Warnung (wenn der Preis das Objekt trifft). Ich bitte Sie sehr darum. Ich weiß nicht viel darüber und kann die Theorie im Fachbuch nicht nachvollziehen, aber ich vermute, dass das Prinzip elementar ist.
 
DanilaMactep:

Hallo zusammen, ich habe versucht, die Ratschläge, die Sie zu meinem letzten Beitrag geschrieben haben, anzuwenden, aber es hat nicht geholfen. Ich erhalte immer noch den Fehler 130L, aber das liegt wahrscheinlich nicht am Stop-Loss selbst, sondern am offenen Kurs. Der Eröffnungskurs für einen Kauf- und einen Verkaufsstopp wird ermittelt, indem der Höchst-/Mindestkurs für eine Anzahl von x Kerzen auf diese Weise bestimmt wird.

Das Problem liegt nicht am Stop, da ich genau den gleichen Stop und atp verwende und die Marktaufträge ohne Fehler öffnen. Das bedeutet, dass das Problem in der Berechnung des Preises für die Einstellung einer Stop-Order liegt. Ich öffne die Aufträge selbst wie folgt


P/S und ich habe vergessen, Ihnen zu sagen, dass ich schwebende Aufträge verwenden möchte, um eine Art Preisfilter für die Eröffnung einer Position zu simulieren, mit anderen Worten, wenn der Preis in die richtige Richtung geht, wird der schwebende Auftrag ausgelöst, aber wenn nicht, wird er storniert und ich werde aus dem Markt sein. Was mache ich bei der Festlegung des Eröffnungskurses falsch? Und vielleicht gibt es eine einfachere Lösung für den Preisfilter bei Geschäften?

p / s sehr freundlich, wenn Sie einen Code, der angewendet werden kann, schreiben Sie eine detaillierte Anleitung für sie, wie ich bin mit ernsthaften Schwierigkeiten beim Lesen des Codes. Eine ausführliche Anleitung, wozu dieser Code dient und wie er angewendet werden kann (um ihn an eine Variable anzuhängen und etwas damit zu tun oder etwas anderes, und bitte schreiben Sie Ihre Kommentare zum Code auf eine verständlichere Weise). Vielen Dank im Voraus ;-) P / S, die Wissen hat und hat Erfahrung nicht vorbei gehen, helfen eine brüderliche - nicht herumschrauben ;-) Ich habe den Gral zu beenden O_o ;-)

In der Funktion iLowest fügen Sie anstelle von MODE_HIGH MODE_LOW ein.

 

Können Sie mir einen Tipp geben? Ich habe ein Liniensegment in ein Diagramm eingezeichnet. Ich muss den Anfangs- und Endpreis des Segments kennen. Ist es machbar?

Dateien:
EURUSDM1.png  22 kb
 
Forallf:

Können Sie mir einen Tipp geben? Ich habe ein Liniensegment in ein Diagramm eingezeichnet. Ich muss den Anfangs- und Endpreis des Segments kennen. Ist das machbar?

Sie können dies tun unter
 
Forallf:

Können Sie mir einen Tipp geben? Ich habe ein Liniensegment in ein Diagramm eingezeichnet. Ich muss den Anfangs- und Endpreis des Segments kennen. Ist das machbar?

Es ist wünschenswert, dass dieses Segment einen originellen Namen hat

 
Alekseu Fedotov:

In der Funktion iLowest fügen Sie anstelle von MODE_HIGH MODE_LOW ein.

Vielen Dank für Ihren Hinweis - ich habe diesen Fall korrigiert, und während des zweijährigen Tests gab es 130 26 Fehler. Gleichzeitig wurden 115 Trades normal eröffnet
 
Порт-моне тв:
Kolleginnen und Kollegen!

die mit Objekten gearbeitet haben. Bitte senden Sie mir ein Beispiel für einen Code, in dem ein manuell gezeichnetes Dreieck, eine Ellipse oder ein Quadrat (ich glaube, es hat einen Namen auf dem Chart) eine Aktion ausführt - zum Beispiel eine Warnung (wenn der Preis das Objekt trifft). Ich bitte Sie sehr darum. Ich weiß nicht viel über dieses Thema und verstehe die Theorie im Fachbuch nicht, aber ich vermute, dass das Prinzip elementar ist.

Kann mir jemand helfen?

Grund der Beschwerde: