Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 828

 
Selamlar. Soru çoğunlukla mantıklı.
Artış sayısında bir sınırlama ile sözde anti-martingale sistemi. Kârla kapatırken, bir sonraki lot bir faktör kadar artırılır. Bir kayıp durumunda veya bir satırdaki karlı pozisyonların sayısı belirtilen sayıyı aşarsa, lot başlangıç pozisyonuna eşittir.
Belirlenen karlı pozisyon sayısı aşıldıktan sonra tekrar artış döngüsü nasıl başlatılır?
 int K_U_= 5 ;
double   LotExponent= 2.00 ;
//+------------------------------------------------------------------+
double llot()
  {
   double lt1=LotLastCloPos( Symbol (),m_magic);//лот последней закрытой позиции
   if (CountProfit( Symbol (),m_magic)>= 1 && CountProfit( Symbol (),m_magic)<K_U_)
      LotSize=lt1*LotExponent; //
   else
      LotSize=Lots;
   return (LotSize);
  }


/

 
lil_lil :
Selamlar. Soru çoğunlukla mantıklı.
Artış sayısında bir sınırlama ile sözde anti-martingale sistemi. Kârla kapatırken, bir sonraki lot bir faktör kadar artırılır. Bir kayıp durumunda veya bir satırdaki karlı pozisyonların sayısı belirtilen sayıyı aşarsa, lot başlangıç pozisyonuna eşittir.
Belirlenen karlı pozisyon sayısı aşıldıktan sonra tekrar artış döngüsü nasıl başlatılır?


/

Zarar Durdur Kar Al kodunda bir örnek: lot boyutu, global program düzeyinde (başlıkta) bildirilen "ExtLot" değişkeninde saklanır (üzerine yazılır, artırılır ve minimuma sıfırlanır). OnTradeTransaction()'da, "piyasa çıkışı" türündeki işlemler yakalanır ve işlemin nasıl kapatıldığı - Kâr Al veya Zarar Durdur ile kontrol edilir:

         if (deal_entry== DEAL_ENTRY_OUT )
           {
             if (deal_reason== DEAL_REASON_SL )
               ExtLot*= 2.0 ;
             else if (deal_reason== DEAL_REASON_TP )
               ExtLot=m_symbol.LotsMin();
           }

Zarar Durdur ile ise lotu ikiye katlarız , Kar Al ile ise lot boyutunu minimum değere sıfırlarız.


Not: EA'nın kendisinde, Zarar Durdur ve Kâr Al hesaplaması biraz yanlıştır - ancak kod yakında yeniden yayınlanacaktır.

 
Vladimir Karputov :

Zarar Durdur Kar Al kodunda bir örnek: lot boyutu, global program düzeyinde (başlıkta) bildirilen "ExtLot" değişkeninde saklanır (üzerine yazılır, artırılır ve minimuma sıfırlanır). OnTradeTransaction()'da, "piyasa çıkışı" türündeki işlemler yakalanır ve işlemin nasıl kapatıldığı - Kâr Al veya Zarar Durdur ile kontrol edilir:

Zarar Durdur ile ise lotu ikiye katlarız , Kar Al ile ise lot boyutunu minimum değere sıfırlarız.


Not: EA'nın kendisinde, Zarar Durdur ve Kâr Al hesaplaması biraz yanlıştır - ancak kod yakında yeniden yayınlanacaktır.

Arka arkaya karlı işlem sayısını sayıyorum, 5'i geçerse ilk lota dönüyorum, ilk lotla 6. pozisyon açılıyor ve hacim = pozisyon 6 lot ile katsayı ile 7. pozisyon açılmalıdır , vb. Parti artış döngüsü yeniden başlatılmalıdır.5 pozisyon daha karlı olduğunda tekrar ilk lota dönmeniz gerekir.  

Üst üste 20 karlı pozisyon. Lotları 1, 2, 4, 8.16, 1, 2, 4, 8.16, 1, 2, 4, 8.16, 1, 2, 4, 8.16 olmalıdır.


 
lil_lil :

Arka arkaya karlı işlem sayısını sayıyorum, eğer 5'i geçerse, ilk lota dönüyorum, ilk lotla 6. pozisyon açılıyor ve hacim = pozisyon 6 lot ile katsayı ile 7. pozisyon açılmalıdır. , vb. Parti artış döngüsü yeniden başlatılmalıdır.5 pozisyon daha karlı olduğunda tekrar ilk lota dönmeniz gerekir.  

Üst üste 20 karlı pozisyon. Lotları 1, 2, 4, 8.16, 1, 2, 4, 8.16, 1, 2, 4, 8.16, 1, 2, 4, 8.16 olmalıdır.


Parti hesaplama fonksiyonunda statik değişken kullanılması gerekmektedir. İşte nasıl çalıştığı:

 //+------------------------------------------------------------------+
//|                                                       Test_1.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ( void )
  {
   static int counter= 0 ;
   for ( int i= 0 ;i< 18 ;i++)
     {
       Print (counter);
      counter++;
       if (counter== 5 )
         counter= 0 ;
     }
  }
//+------------------------------------------------------------------+

Sonuç:

 0
1
2
3
4
0
1
2
3
4
0
1
2
3
4
0
1
2
Dosyalar:
Test_1.mq5  2 kb
 
Vladimir Karputov :

Parti hesaplama fonksiyonunda statik değişken kullanılması gerekmektedir. İşte nasıl çalıştığı:

Sonuç:

Örneğinize göre sıfırladım ama lot artırma sırası çalışmıyor

Üst üste 20 karlı pozisyon. Lotları 1, 2, 4, 8.16, 1, 2, 4, 8.16, 1, 2, 4, 8.16, 1, 2, 4, 8.16 olmalı ve bu şekilde 1, 2 , 4, 8,16 çıkıyor. , 1, 1, 1, 1, 1,.......

Yanlış olan ne?

 int K_U_= 5 ;  double   Lots=1.0;
double   LotExponent= 2.00 ;
//+------------------------------------------------------------------+
double llot()
  {
   double lt1=LotLastCloPos( Symbol (),m_magic);
   if (CountProfit( Symbol (),m_magic)>= 1 && CountProfit( Symbol (),m_magic)<K_U_)
      LotSize=lt1*LotExponent; //
   else
      LotSize=Lots;
   return (LotSize);
  }
  
//+------------------------------------------------------------------

int CountProfit( const string Symb, const long MagicNumber= 0 )
  {
     int counter= 0 ;
   ulong Ticket;

   if ( HistorySelect ( 0 , LONG_MAX ))
       for ( int i= HistoryDealsTotal ()- 1 ; i>= 0 ; i--){
      
         if (( bool )(Ticket= HistoryDealGetTicket (i)) && 
            ( HistoryDealGetInteger (Ticket, DEAL_ENTRY ) == DEAL_ENTRY_OUT ) &&
            ( HistoryDealGetInteger (Ticket, DEAL_MAGIC ) == MagicNumber) &&
            ( HistoryDealGetString (Ticket, DEAL_SYMBOL ) == Symb))
           {
             if ( HistoryDealGetDouble (Ticket, DEAL_PROFIT )> 0 )
            counter++; else
               break ;
           }
           }
   if (counter==K_U_)
      counter= 0 ;
   return (counter);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LotLastCloPos( const string Symb, const long MagicNumber= 0 )
  {
   ulong Ticket;
   double lot_= 0 ;

   if ( HistorySelect ( 0 , LONG_MAX ))
       for ( int i= 0 ; i< HistoryDealsTotal (); i++)
         if (( bool )(Ticket= HistoryDealGetTicket (i)) && 
            ( HistoryDealGetInteger (Ticket, DEAL_ENTRY ) == DEAL_ENTRY_OUT ) &&
            ( HistoryDealGetInteger (Ticket, DEAL_MAGIC ) == MagicNumber) &&
            ( HistoryDealGetString (Ticket, DEAL_SYMBOL ) == Symb))
           {

            lot_= HistoryOrderGetDouble (Ticket, ORDER_VOLUME_INITIAL );

           }

   return (lot_);
  }
 
lil_lil :

Örneğinize göre sıfırladım ama lot artırma sırası çalışmıyor

Üst üste 20 karlı pozisyon. Lotları 1, 2, 4, 8.16, 1, 2, 4, 8.16, 1, 2, 4, 8.16, 1, 2, 4, 8.16 olmalı ve bu şekilde 1, 2 , 4, 8,16 çıkıyor. , 1, 1, 1, 1, 1,.......

Yanlış olan ne?

Yani hala OnTradeTransaction aracılığıyla normal şekilde çalışmak istemiyor musunuz? Yani KESİNLİKLE TÜM TİCARET TARİHİNİ (1970'den beri) sormayı mı tercih ediyorsunuz? Ne için???

 
Vladimir Karputov :

Yani hala OnTradeTransaction aracılığıyla normal şekilde çalışmak istemiyor musunuz? Yani KESİNLİKLE TÜM TİCARET TARİHİNİ (1970'den beri) sormayı mı tercih ediyorsunuz? Ne için???

Bir nedeni vardı, parantez.

Ne demek istemiyorum, OnTradeTransaction'ın sorumla ne ilgisi var;)

 

Şimdi, açıkçası, sorumdan önceki iki gönderi, hesaplamanın bir örneğidir.

Teşekkür ederim.

 
lil_lil :

Bir nedeni vardı, parantez.

Ne demek istemiyorum, OnTradeTransaction'ın sorumla ne ilgisi var;)

Sadece bir ticaret geçmişi isteyin

 HistorySelect ( 0 , LONG_MAX )

1970'den beri bu ticaret hesabından tüm geçmişi istemek anlamına gelir. Bu çok yetersiz:

  • Ya bu hesapta binlerce işlem varsa?
  • ve (Allah korusun) her tikte bu isteği yaparsan?

 

Lütfen işlem geçmişiyle çalışan işlevleri paylaşın.

Son işlemin açılış tarihi, kapanışı, hacmi, finansal sonucu ve türü (alış veya satış) hakkında bilgi almam gerekiyor.

Herhangi birinin buna benzer hazır işlevleri varsa, lütfen paylaşın.