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

[Silindi]  
Vinin :

Teşekkür ederim.
[Silindi]  
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 );
}
[Silindi]  

İ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.

[Silindi]  

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 ...

[Silindi]  
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
[Silindi]  
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);
}