Caratteristiche utili da KimIV - pagina 111

 
Lisi4ka330:
Per favore, ditemi perché ci sono dei plus in return(StrToTime(ye+"."+mo+".01").
I plus in questo contesto sostituiscono la funzioneStringConcatenate().
 
Grazie.... grande)))))
 

Funzione ProfitIFStopInCurrency()

L'altro giorno avevo bisogno di una funzione per il mio pannello informativo che restituisse il profitto/perdita stimato nella valuta del deposito quando un gruppo di posizioni ha attivato i loro stop. Beh, non è la prima volta che scrivo una funzione del genere. L'ho testato a lungo e duramente in diverse società di intermediazione e su diversi strumenti con diversi modi di calcolo dei profitti. Se non lo sai, ce ne sono tre: Forex, CFD e Futures. Ma non riesco a trovare la differenza tra Forex e Futures, ma ho comunque incluso la possibilità di un calcolo diverso nel codice. La perdita massima che può essere restituita dalla funzione è limitata artificialmente dal saldo del conto corrente. Tradizionalmente, potete passare dei parametri alla funzione e quindi filtrare le posizioni di cui avete bisogno per l'analisi:

  • sy - Nome dello strumento. Se impostate questo parametro, la funzione controllerà solo le posizioni dello strumento specificato. NULL significa lo strumento corrente, e "" (di default) significa qualsiasi strumento.
  • op - operazione commerciale, tipo di posizione. Valori validi: OP_BUY, OP_SELL o -1. Il valore predefinito -1 significa qualsiasi posizione.
  • mn - Identificatore di posizione (MagicNumber). Il valore predefinito -1 significa qualsiasi 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 allegato lo script per testare la funzione ProfitIFStopInCurrency().

 

Funzione ProfitIFTakeInCurrency()

Questa funzione è simile alla precedente, solo che restituisce il profitto/perdita stimato nella valuta del deposito quando un gruppo di posizioni ha attivato la loro presa. Viene anche preso in considerazione il metodo di calcolo del profitto: Forex, CFD e Futures .Il massimo profitto che la funzione può restituire è limitato artificialmente dal numero 999.999.999. Parametri:

  • sy - Nome dello strumento. Se si specifica questo parametro, la funzione controllerà solo le posizioni dello strumento specificato. NULL significa lo strumento corrente, e "" (default) significa qualsiasi strumento.
  • op - operazione commerciale, tipo di posizione. Valori validi: OP_BUY, OP_SELL o -1. Il valore predefinito -1 significa qualsiasi posizione.
  • mn - Identificatore di posizione (MagicNumber). Il valore predefinito -1 significa qualsiasi 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);
}

Ho allegato uno script per testare la funzione ProfitIFTakeInCurrency().

 
Una lista di tutti i miei servizi con brevi descrizioni e link ai post di pubblicazione.
File:
 
Ciao, non avete una sorta di modello (per i principianti) per rendere più facile scrivere un EA per il tester e per il trading reale. Qualcosa non si muove ((((
 
Chuma:
Ciao, non avete una sorta di modello (per i principianti) per rendere più facile scrivere un EA per il tester e per il trading reale. Qualcosa non si muove ((((
Template? :)) Beh, prendete uno qualsiasi dei miei EA come punto di partenza...
 
KimIV:
Template? :)) Quindi prendete uno qualsiasi dei miei EA come punto di partenza...

Grazie.... cose interessanti e utili in generale.... ma per ora ho intenzione di creare un consulente di trading che aprirebbe e chiuderebbe posizioni basate sui segnali più semplici (incrociando le medie per esempio) per cominciare, ma tutti questi controlli, determinando il lotto ecc. .... cosa, quando e come... un po' complicato....

 
quindi il pensiero di un template ha attraversato anche la mia mente.... Io sostengo i "compagni inesperti" ))))))
 

Igor, mi scuso per le mie frequenti domande, e spero davvero che questo non sia troppo difficile per te..... Potreste dirmi cosa si intende per

gbDisabled

nella funzione OpenPosition() per l'online

ecco una parte del codice:

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

Quando si compila dà un errore che la variabile non è definita.