KimIV'ten faydalı özellikler - sayfa 111

 
Lisi4ka330 :
Lütfen bana dönüşte neden artılar olduğunu söyleyin ( StrToTime ( ye + " . " + mo + " .01 " )) satırı.
Bu bağlamdaki artılar, StringConcatenate() işlevinin yerini alır.
 
Çok teşekkürler)))))
 

ProfitIFStopInCurrency() işlevi

Geçen gün, bir grup pozisyon için stop tetiklendiğinde mevduat para biriminde tahmini kâr / zararı döndürecek bilgi paneli için bir fonksiyona ihtiyacım vardı. Eh, bu tür işlevler ilk kez yazılmıyor. Farklı DC'lerde ve farklı enstrümanlarda farklı kâr hesaplama yöntemleriyle uzun süre ve sıkıcı bir şekilde test ettim. Kim bilmiyor, bu yöntemlerden zaten üç tane var: Forex, CFD ve Vadeli İşlemler. Forex'in nasıl farklı olduğunu gerçekten bulamadım ve Vadeli İşlemler, ancak kodda farklı hesaplama olasılığı hala . Fonksiyonun geri getirebileceği maksimum kayıp, cari hesap bakiyesinin büyüklüğü ile yapay olarak sınırlandırılır. Geleneksel olarak, fonksiyona parametreler iletebilir ve böylece analiz için ihtiyaç duyduğunuz pozisyonları filtreleyebilirsiniz:

  • sy - Araç adı. Bu parametreyi ayarlarsanız, fonksiyon sadece belirtilen enstrümanın pozisyonlarını kontrol edecektir. NULL , geçerli araç anlamına gelir ve "" (varsayılan) herhangi bir araç anlamına gelir.
  • op - Ticaret işlemi, pozisyon türü. Geçerli değerler: OP_BUY , OP_SELL veya -1 . Varsayılan değer -1 , herhangi bir konum anlamına gelir.
  • mn - Konum Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

not. Ekli, ProfitIFStopInCurrency() işlevini test etmek için bir komut dosyasıdır.

 

ProfitIFTakeInCurrency() işlevi

Bu işlev öncekine benzer, ancak bir grup pozisyon için alımlar tetiklendiğinde mevduat para biriminde tahmini kâr/zararı döndürür. Kar hesaplama yöntemi de dikkate alınır: Forex, CFD'ler ve Vadeli İşlemler. Fonksiyonun döndürebileceği maksimum kar yapay olarak 999.999.999 ile sınırlıdır.Parametreler:

  • sy - Araç adı. Bu parametreyi ayarlarsanız, fonksiyon sadece belirtilen enstrümanın pozisyonlarını kontrol edecektir. NULL , geçerli araç anlamına gelir ve "" (varsayılan) herhangi bir araç anlamına gelir.
  • op - Ticaret işlemi, pozisyon türü. Geçerli değerler: OP_BUY , OP_SELL veya -1 . Varsayılan değer -1 , herhangi bir konum anlamına gelir.
  • mn - Konum Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

not. Ekli, ProfitIFTakeInCurrency() işlevini test etmek için bir komut dosyasıdır.

 
Kısa açıklamalar ve yayın gönderilerine bağlantılar içeren tüm özelliklerimin listesi.
Dosyalar:
 
Merhaba! Bir testçi ve gerçek ticaret için bir danışman yazmayı kolaylaştıracak herhangi bir şablonunuz (yeni başlayanlar için) var mı? Bir şey hareket etmiyor
 
Chuma :
Merhaba! Bir testçi ve gerçek ticaret için bir danışman yazmayı kolaylaştıracak herhangi bir şablonunuz (yeni başlayanlar için) var mı? Bir şey hareket etmiyor
Örneklem? :)) Danışmanlarımdan herhangi birini başlangıç noktası olarak alın...
 
KimIV :
Örneklem? :)) Danışmanlarımdan herhangi birini başlangıç noktası olarak alın...

Teşekkür ederim.... genel olarak, her şey ilginç ve faydalı... ama şimdilik, başlangıç için en basit sinyallerde (örneğin ortalamaların geçişi) pozisyonları açıp kapatacak bir ticaret danışmanı oluşturmayı planlıyorum, sadece tüm bu kontroller, partinin belirlenmesi vb. ... ne, ne zaman ve nasıl ... karmaşık ....

 
bu nedenle, bir şablon fikri de vardı .... "deneyim eksikliği olan yoldaşı destekliyorum"))))))
 

Igor, sık sorduğum sorular için özür dilerim ve umarım bu senin için çok zor değildir ..... Lütfen bana bunun ne anlama geldiğini söyle

 gbDisabled

çevrimiçi için OpenPosition() işlevinde

işte kodun bir parçası:

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

derlerken değişken tanımlı değil hatası veriyor.