[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 616

 
Doğal olarak haklısın. Çubuk başına yalnızca bir kez okuma almak için zaten bir kodunuz olduğu varsayılmıştır.
 
sllawa3 :
bence haklıyım.. Benim de şüphelerim var...

Yaklaşık olarak bu şekilde, öz sermayeyi takip edebilirsiniz, böylece özsermaye ile belirli bir kâr yüzdesine ulaşıldığında, tüm pozisyonları kapatın ve siparişleri silin:

 //--------------------------------------------------------------
// Описание глобальных переменных советника
// ----------------- Трал эквити -------------
extern double   PercentEquityForClose= 15 ;
double          Equ_OLD,
               Equ_NEW,
               EquPerc,
               Equ_Start;

// ---- Дальнейшее описание глобальных переменных советника

//==========================================================

int init()                             // Функция init
{
   Equ_OLD=AccountEquity();
   Equ_Start=Equ_OLD; 
   EquPerc=Equ_Start/ 100 *PercentEquityForClose;
   
// ---- Дальнейший код функции ----

   return ;                             // Выход из init() 
}

//==========================================================
// ---- В функции слежения за событиями ----
// ---- вызываемой из функции start ----

   Equ_NEW=AccountEquity();                               // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
             if (Equ_NEW>=Equ_OLD+EquPerc)                 // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit( NULL , - 1 , - 1 );     // то закрываем все позиции
                  DeleteOrders( NULL , - 1 , - 1 );             // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

Yine dizimin üstüne yazdım hatalar olabilir...
Her bir çubuktaki eşitlikteki değişimi izlemek için, yeni bir çubuğun açılması için bir çek yazmak yeterlidir ve eğer öyleyse, bu kod parçasını yürütün:

   Equ_NEW=AccountEquity();                               // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
             if (Equ_NEW>=Equ_OLD+EquPerc)                 // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit( NULL , - 1 , - 1 );     // то закрываем все позиции
                  DeleteOrders( NULL , - 1 , - 1 );             // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

Bence böyle bir şey...

 
Roger :
Doğal olarak haklısın. Çubuk başına yalnızca bir kez okuma almak için zaten bir kodunuz olduğu varsayılmıştır.
Hayır, hayır, ama yukarıda her tikteki eşitliği kontrol etmek için bir şeyler yazdım. Yeni bir barın açılıp açılmadığını kontrol etmeniz yeterli, eğer öyleyse, o zaman eşitliği kontrol edin... Zor değil bence...
 
Öz sermayenin bakiyeden daha yüksek olması şartıyla, öz sermayeyi artandan azalanlara değiştirmekle ilgileniyorum.. açık olan her şeyi kapatmak için..
 
sllawa3 :
Öz sermayenin bakiyeden daha yüksek olması şartıyla, öz sermayeyi artandan azalanlara değiştirmekle ilgileniyorum.. açık olan her şeyi kapatmak için..

Yeni bir çubuk tanımlama işlevi:

 //+------------------------------------------------------------------+
//|  возвращает признак появления нового бара для указанного периода |
//+------------------------------------------------------------------+
bool isNewBar( int timeFrame)
   {
   bool res=false;
   
   // массив содержит время открытия текущего (нулевого) бара
   // по 7 (семь) таймфреймам
   static datetime _sTime[ 7 ];  
   int i= 6 ;
 
   switch (timeFrame) 
      {
       case 1   : i= 0 ; break ;
       case 5   : i= 2 ; break ;
       case 15 : i= 3 ; break ;
       case 30 : i= 4 ; break ;
       case 60 : i= 5 ; break ;
       case 240 : break ;
       case 1440 : break ;
       default :  timeFrame = 1440 ;
      }
//----
   if (_sTime[i]== 0 || _sTime[i]!=iTime( Symbol (),timeFrame, 0 ))
      {
      _sTime[i] = iTime( Symbol (),timeFrame, 0 );
      res=true;
      }
      
//----
   return (res);   
   }
   

... Öz sermayenin bakiyeden daha yüksek olması şartıyla, öz sermayeyi artandan azalanlara değiştirmekle ilgileniyorum.. açık olan her şeyi kapatmak için..

Daha sonra her kene üzerindeki eşitliği kontrol etmeniz gerekir. Sonuçta, örneğin saatlik olarak çalışırsanız, bir sonraki eşitlik kontrolünden bir saat önce, o, bu eşitlik, şimdiden umutsuzca çökebilir...

Bu yüzden, öz sermayede bu kadar çok bir artışı değil, aptalca bir artışı veya Equ -OLD değişkeninde yazılan son tikteki duruma göre azalmayı, Equ_NEW'deki mevcut değeriyle karşılaştırıyoruz.

 
sllawa3 :
Öz sermayenin bakiyeden daha yüksek olması şartıyla, öz sermayeyi artandan azalanlara değiştirmekle ilgileniyorum.. açık olan her şeyi kapatmak için..

Bunun gibi bir yerde:

   Equ_NEW=AccountEquity();                               // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
             if ( NormalizeDouble (Equ_NEW-Equ_OLD, 8 )< 0 )     // Если эквити уменьшилось по отношению к своему прошлому значению,
               {                                         
                  ClosePosFirstProfit( NULL , - 1 , - 1 );     // то закрываем все позиции
                  DeleteOrders( NULL , - 1 , - 1 );             // и удаляем все ордера.
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

// (NormalizeDouble(Equ_NEW-Equ_OLD,8) <0 ) - возможно здесь нужно сравнивать не с нулём, а с каким-то числом, 
                                         // а то может в последующем и не дать увеличиться балансу, 
                                         // постоянно закрывая вновь открываемые позиции (они ведь требуют залога)

Ancak, bu sadece düşünce için besindir, hazır kod değil ...

 
drknn :

Kesinlikle. Sadece buna bir durdurma değil, bekleyen bir emir denir. Bir terminal açın. İçinde F1'e basın. Açılan pencerede İçindekiler - İşlem - Emir Tipleri'ni açın.

))) teşekkürler, ancak fonlardan sonra, bir ticaret yerine tekliflerin ve taleplerin yürütülmesi utanç verici / olağandışıdır, bir şey karıştığında - şüpheleri gidermek için aptalca bir soru sormaktan çekinmeyin. )))
 

söylemek . satıcının beş ondalık basamağı vardır. açılış fiyatı eksi n,bars almak için gereklidir.iOpen(NULL,0,n) işlevi yalnızca dört ondalık basamak verir (okumalar baskı yoluyla elde edilir). sorun nasıl çözülür. şimdiden teşekkürler.

 
pips500 :

söylemek . satıcının beş ondalık basamağı vardır. açılış fiyatı eksi n,bars almak için gereklidir.iOpen(NULL,0,n) işlevi yalnızca dört ondalık basamak verir (okumalar baskı yoluyla elde edilir). sorun nasıl çözülür. şimdiden teşekkürler.

Print(), 4 ondalık basamağa kadar yuvarlar, çift türü konsola doğru şekilde yazdırmak için ( bu, iOpen() bu durumda 5 ondalık basamak doğruluğuyla döndürür), DoubleToStr() işlevini kullanmanız gerekir.

string DoubleToStr ( çift değer, int basamak)
Sayısal bir değeri, belirtilen duyarlık biçiminde sayının karakter temsilini içeren bir metin dizesine dönüştürür.

Seçenekler:

value   -   Величина с плавающей точкой.

digits   -   Формат точности, число цифр после десятичной точки (0-8).

 
sllawa3 :
Öz sermayenin bakiyeden daha yüksek olması şartıyla, öz sermayeyi artandan azalanlara değiştirmekle ilgileniyorum.. açık olan her şeyi kapatmak için..

Ve işte nasıl çalıştığına bir örnek... Her yeni barda özellikle pozisyon açtım... "DC Killer" gibi çıktı... :)


Ekte testçinin raporu var, burada limit yok ve her tikte açılış pozisyonu çılgın bir yüzde... ve düşüş yok :) Yazık ki, kimse böyle çalışmana izin vermeyecek...

İşte rapordan bir resim:


Bu tür "baskınlar" ile neredeyse hiç dezavantaj olmadan çok para topladım, çekimlere gitmek için zamanım bile olmadı (en üstte görebilirsiniz):


Dosyalar: