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

 
multiplicator :
Bazı nedenlerden dolayı terminal hata göstermiyor)

Ama kendi başına?

 
multiplicator :
Bazı nedenlerden dolayı terminal hata göstermiyor)

Peki ya terminal? Programınızdaki ciltlerin derecesini dikkate almalısınız.

0,000001, 0,12345678 veya 100000,1 gibi çok sayıda pozisyon açmak için programlı olarak bir emir göndermeyi deneyin.

 
Алексей Тарабанов :

Ama kendi başına?

ne herhangi bir şekilde? göstermez.
 
Artyom Trishkin :


Çok fazla 0.12345678 olan bir pozisyon açmak için programlı olarak bir emir göndermeyi deneyin

0.12 lotu ile açılır.

Mesele normalleştirmek ya da normalleşmemek.

 
Artem, belki - peki, onlar?
 
Alekseu Fedotov :

Bunu dene.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot( double lo, bool ro= False , string sy= "" ) {
   double l, k;
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double ls= MarketInfo (sy, MODE_LOTSTEP );
   double ml= MarketInfo (sy, MODE_MINLOT );
   double mx= MarketInfo (sy, MODE_MAXLOT );

   if (ml== 0 ) ml= 0.1 ;
   if (mx== 0 ) mx= 100 ;

   if (ls> 0 ) k= 1 /ls; else k= 1 /ml;
   if (ro) l= MathCeil (lo*k)/k; else l= MathFloor (lo*k)/k;

   if (l<ml) l=ml;
   if (l>mx) l=mx;

   return (l);
}


burası net değil:
   if (ls> 0 ) k= 1 /ls; else k= 1 /ml;
lot adımının sıfırdan büyük veya daha az olması ne fark eder.
 
Алексей Тарабанов :
Artem, belki - peki, onlar?
iyi sen.
uyu.
 
multiplicator :

0.12 lotu ile açılır.

Mesele normalleştirmek ya da normalleşmemek.

Anladım zaten. Bunun bununla ne alakası var, hangi fiyata açtınız, acı çektiniz mi?

 
Алексей Тарабанов :

Anladım zaten. Bunun bununla ne alakası var, hangi fiyata açtınız, acı çektiniz mi?

eski güdük, kimse sana bir şey sormadı. uyu.

Forumdaki yazılarınızı okuduğumda, "bu kişinin beyni zayıf" diye düşünüyorum.
 
Alekseu Fedotov :

Bunu dene.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot( double lo, bool ro= False , string sy= "" ) {
   double l, k;
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double ls= MarketInfo (sy, MODE_LOTSTEP );
   double ml= MarketInfo (sy, MODE_MINLOT );
   double mx= MarketInfo (sy, MODE_MAXLOT );

   if (ml== 0 ) ml= 0.1 ;
   if (mx== 0 ) mx= 100 ;

   if (ls> 0 ) k= 1 /ls; else k= 1 /ml;
   if (ro) l= MathCeil (lo*k)/k; else l= MathFloor (lo*k)/k;

   if (l<ml) l=ml;
   if (l>mx) l=mx;

   return (l);
}

Burada parti adım büyüklüğüne böler, kalanı atar, sonra bu parti adımlarından kaçının ortaya çıktığını alır.

burada bir hata olabilir.

örneğin, değeri fonksiyonda yerine koyarız: 7 lot.
komisyoncunun minimum lot büyüklüğü 5 ve lot adımı 2'dir.


7'yi partinin adımına bölecek. tam parça sayısını alacaktır. Ve yine partinin adımıyla çarpın. Sonuç 6 lot olacaktır. Ve bu ciltle bir sipariş açmaya çalışacak.
Ancak bir sipariş yalnızca 5, 7, 9 vb. Hacim ile açılabilir.


Partimizden (7) minimum parti büyüklüğünü (5) atmak daha iyi olur. Ve geri kalanıyla çalışın.

geri kalanı ile işlevde sahip olduğu tüm eylemleri gerçekleştirin.

kaç tam adım olduğunu say, bir çok adımın boyutu. Ardından adım sayısını parti adım boyutuyla çarpın. 2 alıyoruz.

daha sonra bu ikiliyi tekrar minimum partinin (5) boyutuna ekliyoruz. 5+2=7 çıkıyor.


Ama harika bir örnek veriyorum.
şimdi komisyoncular 0.01'lik minimum lot ve lot adımına sahip
veya minimum lot ve lot adım 0.1