Nützliche Funktionen von KimIV - Seite 111

 
Lisi4ka330:
Bitte sagen Sie mir, warum es Pluszeichen in return(StrToTime(ye+"."+mo+".01") gibt.
Die Pluszeichen ersetzen in diesem Zusammenhang die FunktionStringConcatenate().
[Deleted]  
Dankeschön.... groß)))))
 

Funktion ProfitIFStopInCurrency()

Ich brauchte neulich eine Funktion für mein Info-Panel, die den geschätzten Gewinn/Verlust in der Währung der Einlage zurückgibt, wenn eine Gruppe von Positionen ihre Stopps auslöst. Nun, es ist nicht das erste Mal, dass ich eine solche Funktion geschrieben habe. Ich habe es lange und ausgiebig bei verschiedenen Maklerfirmen und auf verschiedenen Instrumenten mit verschiedenen Arten der Gewinnberechnung getestet. Falls Sie es nicht wissen, es gibt drei davon: Forex, CFD und Futures. Aber ich kann den Unterschied zwischen Forex und Futures nicht finden, aber ich habe trotzdem die Möglichkeit der unterschiedlichen Berechnung in den Code eingebaut. Der maximale Verlust, der durch die Funktion zurückgegeben werden kann, wird künstlich durch den aktuellen Kontostand begrenzt. Traditionell können Sie der Funktion Parameter übergeben und so Positionen herausfiltern, die Sie für die Analyse benötigen:

  • sy - Name des Instruments. Wenn Sie diesen Parameter setzen, prüft die Funktion nur die Positionen des angegebenen Instruments. NULL bedeutet das aktuelle Instrument, und "" (standardmäßig) bedeutet ein beliebiges Instrument.
  • op - Handelsoperation, Positionsart. Gültige Werte: OP_BUY, OP_SELL oder -1. Der Standardwert -1 bedeutet eine beliebige Position.
  • mn - Kennung der Position (MagicNumber). Der Standardwert -1 bedeutet eine beliebige MagicNumber.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.05.2012                                                     |
//|  Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита     |
//|             в случае срабатывания стопа открытых позиций.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double ProfitIFStopInCurrency(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();  // Текущий символ
  int    i, k=OrdersTotal(); // Подсчёт открытых позиций
  int    m;                  // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
  double l;                  // Размер контракта в базовой валюте инструмента
  double p;                  // Размер пункта в валюте котировки
  double t;                  // Минимальный шаг изменения цены инструмента в валюте котировки
  double v;                  // Размер минимального изменения цены инструмента в валюте депозита
  double s=0;                // Подсчёт стопа в валюте депозита

  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
          l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
          m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
          v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
          if (OrderType()==OP_BUY) {
            if (m==0) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
            if (m==1) s-=(OrderOpenPrice()-OrderStopLoss())/p*v/t/l*OrderLots();
            if (m==2) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
            s+=OrderCommission()+OrderSwap();
          }
          if (OrderType()==OP_SELL) {
            if (OrderStopLoss()>0) {
              if (m==0) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
              if (m==1) s-=(OrderStopLoss()-OrderOpenPrice())/p*v/t/l*OrderLots();
              if (m==2) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
              s+=OrderCommission()+OrderSwap();
            } else s=-AccountBalance();
          }
        }
      }
    }
  }
  if (AccountBalance()+s<0) s=-AccountBalance(); // Ограничение убытка балансом счёта
  return(s);
}

HH: In der Anlage finden Sie das Skript zum Testen der Funktion ProfitIFStopInCurrency().

 

Funktion ProfitIFTakeInCurrency()

Diese Funktion ähnelt der vorherigen, nur dass sie den geschätzten Gewinn/Verlust in der Währung der Einlage zurückgibt, wenn eine Gruppe von Positionen ihren Take ausgelöst hat. Auch die Gewinnberechnungsmethode wird berücksichtigt: Forex, CFD und Futures .Der maximale Gewinn, den die Funktion zurückgeben kann, ist künstlich durch die Zahl 999.999.999 begrenzt. Parameter:

  • sy - Name des Instruments. Wenn Sie diesen Parameter angeben, prüft die Funktion nur die Positionen des angegebenen Instruments. NULL bedeutet das aktuelle Instrument, und "" (Standard) bedeutet ein beliebiges Instrument.
  • op - Handelsoperation, Positionsart. Gültige Werte: OP_BUY, OP_SELL oder -1. Der Standardwert -1 bedeutet eine beliebige Position.
  • mn - Kennung der Position (MagicNumber). Der Standardwert -1 bedeutet eine beliebige MagicNumber.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.05.2012                                                     |
//|  Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита     |
//|             в случае срабатывания тейка открытых позиций.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double ProfitIFTakeInCurrency(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();  // Текущий символ
  int    i, k=OrdersTotal(); // Подсчёт открытых позиций
  int    m;                  // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
  double l;                  // Размер контракта в базовой валюте инструмента
  double p;                  // Размер пункта в валюте котировки
  double t;                  // Минимальный шаг изменения цены инструмента в валюте котировки
  double v;                  // Размер минимального изменения цены инструмента в валюте депозита
  double s=0;                // Подсчёт стопа в валюте депозита

  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
          l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
          m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
          v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
          if (OrderType()==OP_BUY) {
            if (OrderTakeProfit()>0) {
              if (m==0) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v*OrderLots();
              if (m==1) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v/t/l*OrderLots();
              if (m==2) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v*OrderLots();
              s+=OrderCommission()+OrderSwap();
            } else s=999999999;
          }
          if (OrderType()==OP_SELL) {
            if (m==0) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v*OrderLots();
            if (m==1) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v/t/l*OrderLots();
            if (m==2) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v*OrderLots();
            s+=OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(s);
}

Ich habe ein Skript beigefügt, um die Funktion ProfitIFTakeInCurrency() zu testen.

 
Eine Liste aller meiner Beiträge mit kurzen Beschreibungen und Links zu den Veröffentlichungsbeiträgen.
Dateien:
 
Hallo! Haben Sie nicht eine Art Vorlage (für Anfänger), um das Schreiben eines EA für den Tester und für den realen Handel zu erleichtern. Irgendetwas ist nicht in Bewegung((((
 
Chuma:
Hallo! Haben Sie nicht eine Art Vorlage (für Anfänger), um das Schreiben eines EA für den Tester und für den realen Handel zu erleichtern. Irgendetwas ist nicht in Bewegung((((
Vorlage? :)) Nun, nehmen Sie einen meiner EAs als Ausgangspunkt...
[Deleted]  
KimIV:
Vorlage? :)) Nehmen Sie also einen meiner EAs als Ausgangspunkt...

Danke.... interessante und nützliche Dinge im Allgemeinen.... aber für jetzt ich plane, einen Handelsberater zu erstellen, die öffnen und schließen Positionen auf der Grundlage der einfachsten Signale (Kreuzung Durchschnitte zum Beispiel) für den Anfang, aber alle diese Kontrollen, die Bestimmung der Menge usw. .... was, wann und wie? ein bisschen kompliziert....

[Deleted]  
daher kam mir auch der Gedanke an eine Vorlage in den Sinn.... Ich unterstütze den "unerfahrenen Kollegen" ))))))
[Deleted]  

Igor, ich entschuldige mich für meine häufigen Fragen, und ich hoffe wirklich, dass dies nicht zu schwierig für Sie ist..... Könnten Sie mir bitte sagen, was gemeint ist mit

gbDisabled

in der Funktion OpenPosition() für Online

Hier ist ein Teil des Codes:

// Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза

Beim Kompilieren wird eine Fehlermeldung ausgegeben, dass die Variable nicht definiert ist.