Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 71

 
Vitalie Postolache :

Ve ne zamandan beri nokta tipi Double ?

Burada string+int'in bir hata olduğunu söylüyorum

Ama yukarıda yazdığım gibi yaparsanız hata olmaz.

 
Renat Akhtyamov :

Burada string+int'in bir hata olduğunu söylüyorum

Ama yukarıda yazdığım gibi yaparsanız hata olmaz.


TamsayıToString ? hayır duymadım ;)
 
Vitalie Postolache :

TamsayıToString? hayır duymadım ;)
ve böylece gayet iyi çalışıyor, herhangi bir sorun görmüyorum
 

herkese selam

Programlamada yeniyim ama öğrenmeye çalışıyorum)

Göstergeye göre bir siparişi kapatmakla ilgili büyük bir sorunum yok

Açılış ve kapanış şartlarını hemen anlatacağım, bir hindinin endikasyonlarına göre bir anlaşma açıp endikasyonlara göre siparişi kapatıyorum ama tam tersi yönde, stop ve karsız

if(r > 50 && p > m) // sipariş açma koşulları satın al

{

biletB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Yeşil); // satın alma emri açma

}

Sipariş kapatma koşulunu doğru yazıyor muyum?

if(r < 50 && p < m) --- bu, bir siparişi satmak ve kapatmak için bir koşuldur

{

SiparişKapat(ticketB,0.1,Teklif,5,Kırmızı);

}

ve başlatılmamış 'ticketB' değişkeninin olası kullanımını atar ve 'OrderClose' dönüş değeri kontrol edilmelidir

Beyler bana nerede yanlış yazdığımı söyler misiniz?



 
funnyrain8 :

herkese selam

Programlamada yeniyim ama öğrenmeye çalışıyorum)

Göstergeye göre bir siparişi kapatmakla ilgili büyük bir sorunum yok

Açılış ve kapanış şartlarını hemen anlatacağım, türkiye'nin endikasyonlarına göre bir anlaşma açıp endikasyonlara göre siparişi kapatıyorum ama ters yönde, stop ve kar olmadan

if(r > 50 && p > m) // sipariş açma koşulları satın al

{

biletB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Yeşil); // satın alma emri açma

}

Sipariş kapatma koşulunu doğru yazıyor muyum?

if(r < 50 && p < m) --- bu, bir siparişi satmak ve kapatmak için bir koşuldur

{

SiparişKapat(ticketB,0.1,Teklif,5,Kırmızı);

}

ve başlatılmamış 'ticketB' değişkeninin olası kullanımını atar ve 'OrderClose' dönüş değeri kontrol edilmelidir

Beyler bana nerede yanlış yazdığımı söyler misiniz?



değişken ticketB başlatılmadı, yani. bilinmeyen Tür. Bu durumda, Int

İkinci hata, siparişin kapatılmasının sonucunu hatalar için kontrol etmenin gerekli olmasıdır. "Hata işleme işlevi" için forumda arama yapın

 
Renat Akhtyamov :

değişken ticketB başlatılmadı, yani. bilinmeyen Tür. Bu durumda, Int

İkinci hata, siparişin kapatılmasının sonucunu hatalar için kontrol etmenin gerekli olmasıdır. "Hata işleme işlevi" için forumda arama yapın

GetLastError mu? Mantığını biraz anlayamıyorum ya da aptalım) ama nasıl ayarlayacağım? İlk başta OrderSelect kullanarak her şeyi yapmaya çalıştım, ama bu değil)

bu konuda bilgiye ihtiyacım var

 
funnyrain8 :

GetLastError mu? Mantığını biraz anlayamıyorum ya da aptalım) ama nasıl ayarlayacağım? İlk başta OrderSelect kullanarak her şeyi yapmaya çalıştım, ama bu değil)

bu konuda bilgiye ihtiyacım var

Evet.

Kod tabanını inceleyin - uygulama örnekleriyle dolu.

 
Merhaba, ben bir sinyal satıcısıyım , insanların onlara abone olması için sinyallerinizi nasıl tanıtabileceğinizi bilmek ister misiniz?
 
Vitalie Postolache :


mantık nerede? İlk siparişte izin verilen maksimum lotu koyarsınız ve sonraki her sipariş için artırırsınız. En hafif tabirle bunun çok makul olmadığını düşünmüyor musunuz?

Ayrıca, döngüde, tamamen mantıksız bir yöntemle birinci dereceden partiyi azaltırsınız ve bundan önce "hesaplanan" diğer siparişlerin çoğu değişmeden kalır, ayrıca bu değerler sınırlarının ötesine geçmez. bu işlev . O zaman neden onlar?

Döngü artışının gerçek bir sayı olamayacağı gerçeğinden bahsetmiyorum bile, bu bir sayaçtır, bir tam sayı olmalıdır. Ve lotun değerini bir sayaç olarak ayarlarsınız ve her yinelemeden birer birer çıkarırsınız. Bu büyük bir hatadır, çok ciddi bir hatadır.

Mantığı önce kafanızda düzeltin, ardından koda çevirmeye çalışın.

Çarpımdan sonra nihai partiyi belirlemek için çıkarılmayan değerler, açılmak için mümkün olan maksimum olmalıdır, aslında bu partilerle siparişler açılmayabilir, çünkü. danışman kısa sürede siparişleri açar, ancak bir olasılık var ve bu nedenle mümkün olan maksimum başlangıç lotunu hesaplamak istiyorum. Tavsiyeni dinledim ve olan oldu. Bu özellik hakkında ne düşünüyorsunuz? Bana öyle geliyor ki bir şeyi kaçırdım ve doğru şekilde kayıt olmadım, test cihazı biraz takılıyor ve çıktıda çok küçük.
 //Функция расчета торгового лота
double GetLots()
{
 double lots = 0.0 ;
 double L9 = MarketInfo ( Symbol (), MODE_MAXLOT );
 double L8 = L9 / Multipler;
 double L7 = L8 / Multipler;
 double L6 = L7 / Multipler;
 double L5 = L6 / Multipler;
 double L4 = L5 / Multipler;
 double L3 = L4 / Multipler;
 double L2 = L3 / Multipler;
 double cl = L2 / Multipler;
 double balance = AccountFreeMarginCheck ( Symbol (), OP_BUY ,L9);
 
 if (balance <= AccountFreeMargin ())
 {
   for ( int risk = 100 ;balance > 0 && risk > 0 ;risk--)
  {
   if (! IsStopped ())
   {
     if (risk >= 1 )
    {
     lots = (cl/ 100 )*risk;
    }
     if (risk < 1 )
    {
     for ( int risk2 = 100 ;balance > 0 && risk2 >= 1 ;risk2--)
     {
      lots = (cl/ 100 )*(risk2* 0.01 );
     }
    }
   }
  }
 }
 double clots = NormalizeDouble ( MathMax (lots, MarketInfo ( Symbol (), MODE_MINLOT )), 2 );
 return (clots);
}
 
Arseniy Barudkin :

Ve bu konuda ne diyorsun?


Ben de aynısını söyleyeceğim. Mantıkla arkadaş olmayın. Serbest marj ve risk değerine (yaklaşık %3 yazıldığı gibi) dayalı olarak ilk lotu hemen hesaplamanın sorunu nedir? Neden hepsi tek bir yerde?

Serbest marj değerini alın, riskle çarpın, 100'e bölün ve 1 lot için marj değerine bölün - burada belirli bir serbest marj yüzdesi ile lotu hesaplamak için en basit formül. Pekala, partiyi değiştirmek için bir adım daha dikkate alınmalı ve DC'nin izin verdiği minimum-maksimum partinin ötesine geçilmemelidir:

 input double risk = 3 ; //процент свободной маржи для расчёта лота
double GetLots()
{
   double margin = MarketInfo ( Symbol (), MODE_MARGINREQUIRED );
   double lotstep = MarketInfo ( Symbol (), MODE_LOTSTEP );
   double rsk = MathMin ( 100.0 ,risk);
   double lotmax = MarketInfo ( Symbol (), MODE_MAXLOT );
   double lotmin = MarketInfo ( Symbol (), MODE_MINLOT );

   double clots = NormalizeDouble (lotstep* MathRound ( AccountFreeMargin ()*rsk/ 100 /margin/lotstep), 2 );
   if (clots < lotmin) clots = lotmin;
   if (clots > lotmax) clots = lotmax;

return (clots);
}