Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 351

 
Lütfen bu işlevdeki hataları düzeltmeme yardım edin. Zaten tüm suyu benden sıktı. Fonksiyonun özü, belirli bir kâra ulaşıldığında, fonksiyonun emrin yarısını kapatması gerekir.
void CloseHalfOrder(){

for (int i = 0; i<=OrdersTotal(); i++)
{
if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderProfit()>= NormalizeDouble (TP*Point,Digits))
{
if (OrderType() == OP_BUY)
double Lots = OrderLots();
double HalfLot = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);

if (OrderType() == OP_SELL)
double Lots1 = OrderLots();
double HalfLot1 = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
}
}
}
}

evet ve ayrıca, bir açık sipariş için yalnızca bir kez çalışmasını nasıl sağlayabilirim?
 
Trader7777 :
Lütfen bu işlevdeki hataları düzeltmeme yardım edin. Zaten tüm suyu benden sıktı. Fonksiyonun özü, belirli bir kâra ulaşıldığında, fonksiyonun emrin yarısını kapatması gerekir.
evet ve ayrıca, bir açık sipariş için yalnızca bir kez çalışmasını nasıl sağlayabilirim?
Emirlerin kısmi kapanma prensibini buradan görebilirsiniz.
 
Trader7777 :
Lütfen bu işlevdeki hataları düzeltmeme yardım edin. Zaten tüm suyu benden sıktı. Fonksiyonun özü, belirli bir kâra ulaşıldığında, fonksiyonun emrin yarısını kapatması gerekir.

void CloseHalfOrder(){

for (int i = 0; i<=OrdersTotal(); i++)
{
if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){//Нефига тут профиту делать, это так, для убыстрения....

if(OrderProfit()>= NormalizeDouble (TP*Point,Digits)) //А тут вообще непонятки что с чем сравниваете....
{
if (OrderType() == OP_BUY)
double Lots = OrderLots();
double HalfLot = NormalizeDouble (Lots*0.5,2);// Тут озаботится чтобы лот не стал меньше минимального
OrderClose(OrderTicket(),HalfLot,Bid,0,HotPink);

if (OrderType() == OP_SELL)
double Lots1 = OrderLots();
double HalfLot1 = NormalizeDouble (Lots*0.5,2);
OrderClose(OrderTicket(),HalfLot1,Ask,0,HotPink);
}
}
}

}


}

evet ve ayrıca, bir açık sipariş için yalnızca bir kez çalışmasını nasıl sağlayabilirim?
 
TarasBY :
Emirlerin kısmi kapanma prensibini buradan görebilirsiniz.

Teşekkür ederim. Ama yine de önce hatalarımı anlamak istiyorum. Ben de aynı şekilde çalışıyorum .. Dahası, bana gerçeğe çok yakınım gibi geliyor.

 

tekrar.. Fonksiyon çalışmıyor. Hataları anlamak istiyorum. + 1 açık sipariş için sadece 1 kez çalışması nasıl yapılır? Şimdiden çok teşekkür ederim)

 extern int TP         = 200 ; // это количество пунктов после которых должно произойти частичное закрытие
extern int Magic      = 77 ;


void CloseHalfOrder(){

for ( int i = 0 ; i<= OrdersTotal (); i++)
  {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ) == true )
      {
         if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic && OrderProfit ()>= NormalizeDouble (TP* Point , Digits ))
          {
             if ( OrderType () == OP_BUY ) 
             double Lots = OrderLots (); 
             double HalfLot  = NormalizeDouble (Lots* 0.5 , 2 ); // изначально ( при открытии ордера) лот рассчитывается так, что он не может быть меньше чем 0,02
            OrderClose ( OrderTicket (),HalfLot, Bid , 0 ,HotPink);
          
             if ( OrderType () == OP_SELL )
             double Lots1 = OrderLots (); 
             double HalfLot1  = NormalizeDouble (Lots* 0.5 , 2 );
             OrderClose ( OrderTicket (),HalfLot1, Ask , 0 ,HotPink);
          }
        }
      }
    }
 
Trader7777 :

tekrar.. Fonksiyon çalışmıyor. Hataları anlamak istiyorum. + 1 açık sipariş için sadece 1 kez çalışması nasıl yapılır?


Sipariş için bir kez çok net bir durum değil. Peki burada muhtemelen global değişkenler kullanılmalıdır. Birkaç sipariş olabilir ve her biri yalnızca bir kez olabilir mi?
 
Trader7777 :

tekrar.. Fonksiyon çalışmıyor. Hataları anlamak istiyorum. + 1 açık sipariş için sadece 1 kez çalışması nasıl yapılır?

Parti büyüklüğüne göre filtrele
 

Aşağıdaki duruma sahibim. Expert Advisor'ın birkaç modülü vardır, her modül birkaç kullanıcı işlevine sahiptir. Kodda boğulmamak için her modülü betiklere koymaya karar verdim. İşte bir Uzman Danışmandan komut dosyası çağırmak için bir satış seçeneği. Ancak burada şu sorun ortaya çıkıyor: komut dosyasını çağırırken, ona bazı parametreler iletmeniz gerekiyor. Global değişkenleri kullanabilirsiniz. Başka hangi seçenekleri düşünebilirsiniz?

Hemen söylüyorum: iCustom () aracılığıyla "daha basit" seçenek iki nedenden dolayı bana uymuyor. İlk olarak, modüle yapılan çağrı kalıcı değil, bellekte epizodik olmalıdır. İkincisi, gösterge dizileri kullanmıyorum.

 
Sepulca :

Sipariş için bir kez çok net bir durum değil. Peki burada muhtemelen global değişkenler kullanılmalıdır. Birkaç sipariş olabilir ve her biri yalnızca bir kez olabilir mi?

Piyasada sadece bir sipariş olabilir. Şu anda, bu işlev hiç çalışmıyor .. nedense. Ama normal çalışıyorsa, kazancı belirlenen puan sayısından fazla olduğu sürece sürekli çalışacağını anlıyorum. Tabii ki, pozisyonun sadece bir kez yarısını kapatması gerekiyor ve hepsi bu. Ama yeni başlayanlar için, en azından kazanırdı)
 
gyfto :

Aşağıdaki duruma sahibim. Expert Advisor'ın birkaç modülü vardır, her modül birkaç kullanıcı işlevi görür. Kodda boğulmamak için her modülü betiklere koymaya karar verdim. İşte bir Uzman Danışmandan komut dosyası çağırmak için bir satış seçeneği. Ancak burada şu sorun ortaya çıkıyor: komut dosyasını çağırırken, ona bazı parametreler iletmeniz gerekiyor. Global değişkenleri kullanabilirsiniz. Başka hangi seçenekleri düşünebilirsiniz ?

Hemen söylüyorum: iCustom () aracılığıyla "daha basit" seçenek iki nedenden dolayı bana uymuyor. İlk olarak, modüle yapılan çağrı kalıcı değil, bellekte epizodik olmalıdır. İkincisi, gösterge dizileri kullanmıyorum.


Bir seçenek olarak kütüphane sorunu.