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

 
Vinin :

Teşekkür ederim.
 
AlexSTAL :
uyarılar

Ana dilim Ukraynaca. Ama dikkatiniz için teşekkürler.
 

Yardım! 2 ertelemem varsa ve bunlardan biri Take Profit tarafından kapatılırsa, 2.sinin silinmesini istiyorum. Nasıl yazılır? Koddaki hata nerede?

 int pos;
for (pos= 0 ; pos< OrdersTotal (); pos++)
{
if ( OrderSelect (pos, SELECT_BY_POS))
{
if (OrderClosePrice() >= OrderTakeProfit())
{
int i;
for (i= 0 ; i< OrdersTotal (); i++)
{
if ( OrderSelect (i, SELECT_BY_POS))
{
if (OrderDelete(OrderTicket()))
{
Print ( "Ордер удален" );
       }
      }
     }
    }
break ;
   }
  }
 }
return ( 0 );
}
 

İyi akşamlar (önceki gönderilerde merhaba demeyi unuttum). Aşağıdakileri yapmak için hangi işlevi kullanacağınızı önerebilir misiniz? Danışmanda, mevcut mumdaki gösterge tarafından bir sipariş açılmaktadır (sayı = 9 olsun). Emri açtıktan sonra (gösterge) yeniden çizilirse (ve mum kapandıktan sonra görünmüyorsa9), o zaman emrin mumun kapanmasından SONRA kapatılmasına ihtiyacım var9.

 

Giriş parametreleri vardır:

bool Mart - eğer doğruysa, durarak kapalı bir emir vardı, bu nedenle ikiye katlandı.

TradeInf - işlem yapma izni , doğruysa, işlem gören emir yoktur ve işlem yapabilirsiniz)

Aşağıdaki kod var:
if (Mart == true && TradeInf==true)
{
Alert("lot katlama");
PartiS=NormalizeÇift(LotS*martin,2);
Alert("lot büyüklüğü", LotS);
}
if (Mart == false && TradeInf==true)
{
Alert("Lot sıfırlama");
lotS=lot;
}

Ayrıca, OpenOrder komutlarında lot büyüklüğü = LotS.

Bu nedenle, zararla kapatılan bir sipariş bulursa, parti büyüklüğü şu şekilde olur: -9315605757223323600
nedenmiş? hata nerede?

 

merhaba, bakiye değerinden lotu çeşitli prensiplere göre hesaplıyorum...

sonuç olarak 0.2345 gibi bir sayı alıyorum, yuvarlamadan ikiye katlamayı nasıl kesebilirim, yani:

bir haneye kadar - 0.2

iki karaktere kadar - 0.23

üçe kadar - 0.234 ve benzeri ...

 
akacuk21 :

merhaba, bakiye değerinden lotu çeşitli prensiplere göre hesaplıyorum...

sonuç olarak 0.2345 gibi bir sayı alıyorum, yuvarlamadan ikiye katlamayı nasıl kesebilirim, yani:

bir haneye kadar - 0.2

iki karaktere kadar - 0.23

üçe kadar - 0.234 ve benzeri ...


çift lot = NormalizeDouble (LOT,2)

lot - sipariş vermek için

LOT - sipariş hesaplama formülü

"2" - 2 ondalık basamağa yuvarlama.

 
cevap için teşekkürler, ancak NormalizeDouble durumunda, 0.29 gibi bir sayı bir ondalık basamağa yuvarlandığında 0,3 olacak ve 0,2 olması gerekiyor
 
Bu yuvarlama kurallarına aykırıdır, kıdemli yoldaşların ne diyeceğini bekleyelim.
 
Sys15975382 :
Bu yuvarlama kurallarına aykırıdır, kıdemli yoldaşların ne diyeceğini bekleyelim.

Tanrım. Pek çok şeyi bu kadar kolay normalleştiremezsiniz... :) İşte size yardımcı olacak bir şey:

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