MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1584

 
Valeriy Yastremskiy :

fark modülü. Modül olmadan sadece üst bölge duruma düşer. | OpenPrice - Teklif |> 10*_Puan açılış koşulu

Bu nedenle, koşula göre gereklidir, Teklif OpenPrice'tan daha düşüktür ve modül yoktur.

Aksi takdirde, Teklif OpenPrice'tan daha yüksekse doğru sonucu alırız.

 
Valeriy Yastremskiy :

fark modülü. Modül olmadan sadece üst bölge duruma düşer. | OpenPrice - Teklif |> 10*_Puan açılış koşulu

pek anlamadım...

lütfen yeni başlayanlar için daha erişilebilir hale getirebilir misiniz ...)

 
MakarFX :

beni şaşırtıyorsun


Nasıl?
 
Alexey Viktorov :
Nasıl?
Alexey Viktorov :

OpenPrice - Teklifin 10*_Puan'dan fazla olmaması gerektiği resimden görülebilir.

ancak negatif dahil olmak üzere daha az olabilir

 
MakarFX :

ancak negatif dahil olmak üzere daha az olabilir

Evet… ve durum “&& > 0” ile ortaya çıkıyor

Ve soru nedir? Aynen öyle mi yoksa bir şey için mi?

 
Alexey Viktorov :

Evet… ve durum “&& > 0” ile ortaya çıkıyor

Ve soru nedir? Aynen öyle mi yoksa bir şey için mi?

Şimdi piyasaya giriş anının bu tanımını kullanıyorum.

 if (Bid < OpenPrice && Bid > OpenPrice-Х* Point )
if (Ask > OpenPrice && Ask < OpenPrice+Х* Point )

Basitleştirmenin mümkün olabileceğini düşündüm

 

martin'den sorumlu bir kod parçasının optimize edilmesine yardımcı olun

görev şu:

- duraktan sonra Martin partiyi çarpar;

- Çarpma sayısı OrdersClose fonksiyonu ile ayarlanabilir, belirtilen değere ulaşıldığında parti büyüklüğü başlangıç değerine sıfırlanır;

- parti büyüklüğünün başlangıç değerine sıfırlanmaması, tersine sırayla azalması gerekir;

örneğin OrdersClose=5, Martin=2, lot=0.01:

dizimiz var: 0.01; 0.02; 0.04; 0.08; 0.16 (sıfırlama) 0.01; 0.01;,,,,

ihtiyaç: 0.01; 0.02; 0.04; 0.08; 0.16 (sıfırlama) 0.16; 0.08; 0.04;.... 0.01.

Sorunu kendim çözecek bilgiye sahip değilim.

Çeşitli kombinasyonlar denedim ama istenilen etkiyi elde edemedim.

 double LOT()
{
   int n= 0 ;
   double OL=dLots;
   for ( int j = OrdersHistoryTotal()- 1 ; j >= 0 ; j--)
   {
       if ( OrderSelect (j, SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == iMagic)
         {
             if (OrderProfit()< 0 ) 
            {
               if (n== 0 ) OL= NormalizeDouble (OrderLots()*K_Martin,DigitsLot);
               n++;
               if (n>=OrdersClose) { Comment ( "1" ); return (dLots);}
            }
             else
            {
               if (n== 0 ) { Comment ( "2" ); return (dLots);}
               else { Comment ( "3" ); return (OL);}
            }
         }
      }
   }
   return (OL);
}
 
MakarFX :

Şimdi piyasaya giriş anının bu tanımını kullanıyorum.

Basitleştirmenin mümkün olabileceğini düşündüm

 if (Bid < OpenPrice && Bid > OpenPrice-Х* Point )
if (Ask > OpenPrice && Ask < OpenPrice+Х* Point ) // цену в середину диапазона ставим

OpenPriceS=OpenPrice-X* Point / 2 ;
if(fabs(Bid-OpenPriceS)>Х* Point ){ ....   }

Ve Alexei haklı.

Alexey Viktorov :

Bu nedenle, duruma göre gereklidir, Teklif OpenPrice'tan daha düşüktür ve modül yoktur.

Aksi takdirde, Teklif OpenPrice'tan daha yüksekse doğru sonucu alırız.

düzeltildi)

Evet bu doğru. Durum değişmedi. Alışılanın dışında. Şekilde ortadaki Teklifi düşürür)))

Ama ikinci bir şart daha var, kayıtlar şart sayısı bakımından aynıdır.

 
законопослушный гражданин :

martin'den sorumlu bir kod parçasının optimize edilmesine yardımcı olun

görev şu:

- duraktan sonra Martin partiyi çarpar;

- Çarpma sayısı OrdersClose fonksiyonu ile ayarlanabilir, belirtilen değere ulaşıldığında parti büyüklüğü başlangıç değerine sıfırlanır;

- parti büyüklüğünün başlangıç değerine sıfırlanmaması, tersine sırayla azalması gerekir;

örneğin OrdersClose=5, Martin=2, lot=0.01:

dizimiz var: 0.01; 0.02; 0.04; 0.08; 0.16 (sıfırlama) 0.01; 0.01;,,,,

ihtiyaç: 0.01; 0.02; 0.04; 0.08; 0.16 (sıfırlama) 0.16; 0.08; 0.04;.... 0.01.

Sorunu kendim çözecek bilgiye sahip değilim.

Çeşitli kombinasyonlar denedim ama istenilen etkiyi elde edemedim.

 //+------------------------------------------------------------------+
//| Расчет лота                                                      |
//+------------------------------------------------------------------+
double Lots()
  {
   double L= 0 ;
   // если последняя закрытая сделка убыточная и лот равен стартовому
   // включаем Мартин
   if (GetInfoLastPos( 2 )< 0 &&GetInfoLastPos( 1 )==Lot) 
     {
      Martin= true ;
     }
   // если последняя закрытая сделка убыточная и лот больше или равен максимальному
   // выключаем Мартин
   if (GetInfoLastPos( 2 )< 0 &&GetInfoLastPos( 1 )>=MaxMartinLot)
     {
      Martin= false ;
     }
   // если последняя закрытая сделка убыточная и Мартин включен, умножаем лот
   if (Martin== true )
     {
      L= NormalizeDouble (GetInfoLastPos( 1 )*K_Martin,DigitsLot);
     }
   // если последняя закрытая сделка убыточная и Мартин выключен, делим лот
   if (Martin== false )
     {
      L= NormalizeDouble (GetInfoLastPos( 1 )/K_Martin,DigitsLot);
     }

   if (L>MAXLOT) L = MAXLOT;
   if (L<MINLOT) L = MINLOT;
   return (L);
  }
//+----------------------------------------------------------------------------+
//|  Функция возвращает по символу и магику                                    |
//|  1 - размер лота последней закрытой позиции                                |
//|  2 - размер профита с учетом комиссии и свопа последней закрытой позиции   |
//|  3 - время последней закрытой позиции                                      |
//+----------------------------------------------------------------------------+
double GetInfoLastPos( int a= 1 )
  {
   datetime t= 0 ;
   double result= 0 ,l= 0 ,p= 0 ,f= 0 ;
   int i=OrdersHistoryTotal();
   for ( int pos= 0 ; pos<i; pos++)
     {
       if ( OrderSelect (pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if (OrderSymbol()== _Symbol && OrderMagicNumber()==Magic)
           {
             if (OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if (t<OrderCloseTime()) {t=OrderCloseTime(); l=OrderLots(); p=OrderProfit()+OrderCommission()+OrderSwap();}
              }
           }
        }
     }
   if (a== 1 ) {result=l;} else
   if (a== 2 ) {result=p;} else
   if (a== 3 ) {result=( double )t;}
   else      {result= 0 ;}
   return (result);
  }
 
Valeriy Yastremskiy :

Ve Alexei haklı.

Evet bu doğru. Durum değişmedi. Alışılanın dışında. Şekilde ortadaki Teklifi düşürür)))

Teşekkürler, ancak bu kodumu hiçbir şekilde basitleştirmiyor)