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

 
evillive :
Dakikalardan değil adımlardan bahsediyorum. çok ama tamam hadi gidelim
ah, peki, evet. Tabii ki, kendiniz için yazmıyorsanız, düşünmeniz gerekir.
 
evillive :

Teşekkürler, anladım :D

Açıkçası kendim için tüm kontrollerle yazıyorum, olması gerektiği gibi, denge / 10 oranını getirmek için çok fazla bir taslak vardı, ancak fikir başarısız oldu ...

Ancak çok fazla metniniz var, daha basit olabilir:

  lotstep= MarketInfo(Symbol(),MODE_LOTSTEP);
  lotmax=MarketInfo(Symbol(), MODE_MAXLOT);
  lotmin=MarketInfo(Symbol(), MODE_MINLOT);

lot=lotstep* MathRound (AccountBalance()* 0.001 /lotstep);
if (lot < lotmin) lot = lotmin;
if (lot > lotmax) lot = lotmax;

Daha kolay olabilir. Ancak lotstep için MarketInfo() 0 döndürürse ne olur? Harika sonuçlar? EA durdurulacak ve pozisyonlar terk edilecek mi?

Ve komisyoncu tarafından MINLOT değeri 0.03 olarak ayarlanırsa ve LOTTEP 0.02 olarak ayarlanırsa, yani izin verilen ilk iki lot değeri 0.03 ve 0.05 ve cari bakiye 41 ise, bunun değeri ne olacaktır. kodunuzda hesaplanan lot?

Neden, lot minimumdan küçükse - örneğin, 1 bakiye ile, ifadenin tam hesaplanmasından sonra 0 olur - neden bu durumda kodunuzda lot MINLOT'a eşit alınır, bu , örneğin 0,03, yani "AccountBalance()*0,001"in "ham" değerinden 30 kat daha büyük, bu durumda 0,001?

Geçerli bir lot değeri döndürmek her zaman mümkün değildir, çünkü koşullar geçerli lot değerlerinden HİÇBİRİ bunlarla eşleşmeyecek şekilde olabilir. Hata durumlarının hepsi programlanmalıdır ve bunun işin en az %90'ı olduğunu unutmamalıyız.

MetaQuotes tarafından belirlenen uygulanabilir model, lot = MINLOT + N * LOTSTEP, burada N = 0, 1, 2... M şeklindedir. Ve M, MINLOT + M * LOTTEP <= MAXLOT ve MILOT + (M + 1 olacak şekildedir) ) * LOTSTEP > MAXLOT. Buna göre kurulan model, yani lot = MINLOT + N * LOTTEP içinde hesaplanmalıdır. O zaman MINLOT ve LOTTEP'in her türlü uygunsuz kombinasyonu önemsiz hale gelir, çünkü formül genel bir şekilde çalışır. Bir kez düzgün bir şekilde yazdım, düzgün bir şekilde hatalarını ayıkladım ve ilginç ve zevkle başka bir şeye odaklandım. Ve zevkle - çünkü sürekli olarak kötü yazılmış koda dönmek zorunda değilsiniz çünkü yine bu kod çalışmıyor, sadece hatalı ...

 
simpleton :

Daha kolay olabilir. Ancak lotstep için MarketInfo() 0 döndürürse ne olur? Harika sonuçlar? EA durdurulacak ve pozisyonlar terk edilecek mi?

Ve komisyoncu tarafından MINLOT değeri 0.03 olarak ayarlanırsa ve LOTTEP 0.02 olarak ayarlanırsa, yani izin verilen ilk iki lot değeri 0.03 ve 0.05 ve cari bakiye 41 ise, bunun değeri ne olacaktır. kodunuzda hesaplanan lot?

Neden, lot minimumdan küçükse - örneğin, 1 bakiye ile, ifadenin tam hesaplanmasından sonra 0 olur - neden bu durumda kodunuzda lot MINLOT'a eşit alınır, bu , örneğin 0,03, yani "AccountBalance()*0,001"in "ham" değerinden 30 kat daha büyük, bu durumda 0,001?

Geçerli bir lot değeri döndürmek her zaman mümkün değildir, çünkü koşullar geçerli lot değerlerinden HİÇBİRİ bunlarla eşleşmeyecek şekilde olabilir. Hata durumlarının hepsi programlanmalıdır ve bunun işin en az %90'ı olduğunu unutmamalıyız.

MetaQuotes tarafından belirlenen uygulanabilir model, lot = MINLOT + N * LOTSTEP'dir, burada N = 0, 1, 2... M. Ve M, MINLOT + M * LOTTEP <= MAXLOT ve MILOT + (M + 1) * olacak şekildedir. LOTSTEP > MAXLOT. Buna göre kurulan model, yani lot = MINLOT + N * LOTTEP içinde hesaplanmalıdır. O zaman MINLOT ve LOTTEP'in her türlü uygunsuz kombinasyonu önemsiz hale gelir, çünkü formül genel bir şekilde çalışır. Bir kez düzgün bir şekilde yazdım, düzgün bir şekilde hatalarını ayıkladım ve ilginç ve zevkle başka bir şeye odaklandım. Ve zevkle - çünkü sürekli olarak kötü yazılmış koda dönmek zorunda değilsiniz çünkü yine bu kod çalışmıyor, sadece hatalı ...

Bu tür korkular için, fonların yeterliliğinin bu kadar çok şeyle açılması için bir kontrol de var. Aklı başında hiç kimse, bir robotun minimum 10 dolar yatırmasına izin vermez. örneğin lot 0.1 ve adım 0.1.

Bir de böyle zeki biri varsa robot ona "Para ver ama şimdilik hoşçakal" der :D

Ve ben hiç bir yerde lot basamağının sıfır olduğunu görmedim, okumadım, bunlar fanteziler...

 
evillive :

Bu tür korkular için, fonların yeterliliğinin bu kadar çok şeyle açılması için bir kontrol de var. Aklı başında hiç kimse, bir robotun minimum 10 dolar yatırmasına izin vermez. örneğin lot 0.1 ve adım 0.1.

Bir de böyle zeki biri varsa robot ona "Para ver ama şimdilik hoşçakal" der :D

Test cihazında MarketInfo ile sıfır olmaması için şunu yapıyorum:

   double AFM = AccountFreeMargin(); 
   double StopLevel,FreezeLevel,spr,prot;
   if (IsOptimization() || IsTesting() || IsVisualMode())
  {
    MinLot = 0.1 ;
    LotStep = 0.01 ;
    spr = Point * 10 ;
    StopLevel = spr* 2 ;
    FreezeLevel = spr* 2 ;
  }
   else
  {
    MinLot = MarketInfo( Symbol (),MODE_MINLOT);
    LotStep = MarketInfo( Symbol (),MODE_LOTSTEP);
    spr = MarketInfo( Symbol (),MODE_SPREAD)* Point ;
    StopLevel = MarketInfo( Symbol (),MODE_STOPLEVEL)* Point ;
    FreezeLevel = MarketInfo( Symbol (),MODE_FREEZELEVEL)* Point ;
  }
   if (MM == 1 ) 
  lot = MinLot+ MathMax (LotStep* MathFloor ((AFM-initdepo)*risk/ 100 ), 0 ); 
   else if (MM == 0 ) lot = MinLot;
 
evillive :

Bu tür korkular için, fonların yeterliliğinin bu kadar çok şeyle açılması için bir kontrol de var. Aklı başında hiç kimse, bir robotun minimum 10 dolar yatırmasına izin vermez. örneğin lot 0.1 ve adım 0.1.

Bir de böyle zeki biri varsa robot ona "Para ver ama şimdilik hoşçakal" der :D

Ve ben hiç bir yerde lot basamağının sıfır olduğunu görmedim, okumadım, bunlar fanteziler...

Neden korku? Basitleştirilmiş modele uymadığı için mi?

MINLOT = 0.03 ve LOTTEP = 0.02 ile izin verilen ilk iki lot değerinin 0.03 ve 0.05 olduğunu kastettim. Bu durumda, bakiye 41 ise, kodunuz:

lot=lotstep* MathRound (AccountBalance()* 0.001 /lotstep);

geçersiz olan 0.04 lot değeri verecektir. Robot, "sunucu yanlış parti büyüklüğüne sahip olduğumu söyledi" gibi bir şey söyleyecektir.

MarketInfo() aracılığıyla değeri istenirken bir hata oluştuğunda sıfır lot adımı alınabilir. Yapay olarak bir hata nasıl yapılır - kodu verdim:

 Print ( "MarketInfo(\"Фигня\", MODE_LOTSTEP) = " , MarketInfo( "Фигня" , MODE_LOTSTEP));

Dikkat çekici bir şekilde 0 döndürür. Hangi fanteziler?

 
simpleton :

Neden korku? Basitleştirilmiş modele uymadığı için mi?

MINLOT = 0.03 ve LOTTEP = 0.02 ile izin verilen ilk iki lot değerinin 0.03 ve 0.05 olduğunu kastettim. Bu durumda, bakiye 41 ise, kodunuz:

geçersiz olan 0.04 lot değeri verecektir. Robot, "sunucu yanlış parti büyüklüğüne sahip olduğumu söyledi" gibi bir şey söyleyecektir.

MarketInfo() aracılığıyla değeri istenirken bir hata oluştuğunda sıfır lot adımı alınabilir. Yapay olarak bir hata nasıl yapılır - kodu verdim:

Dikkat çekici bir şekilde 0 döndürür. Hangi fanteziler?

lot=lotstep* MathRound (AccountBalance()* 0.001 /lotstep);

Bu formülün gereksinimlere göre değiştirilmesi oldukça kolaydır. Sadece minimum lotu hesaba katmanız gerekir

biraz farklı görünecek

lot=Min_Lot+lotstep* MathRound ((AccountBalance()-X)* 0.001 /lotstep);

Nerede X - Minimum lotu açmak için bakiye,

Ancak minimum lotun kontrol edilmesi yine de gerekli olacaktır.

 

Tünaydın!

Cahillere yardım edin) Tester hatası 10013'te siparişler açılamıyor Geçersiz istek, hatanın olduğu koda bakın.

Günlükteki tüm rakamlar sıraya göre görüntülenir, ancak sipariş açılmaz.

2014.10.19 12:14:34.984 2014.02.03 00:06:00 102.31100 sl'de 0.10 satın alma isteği başarısız oldu: 102.27200 tp: 102.33600 [Geçersiz istek]

2014.10.19 12:22:17.928 2014.02.03 00:06:00 bilet =0 retcode =10013

 MqlTradeRequest Req;
MqlTradeResult   Res;
   string TradeSmb;
   if (TradeSmb== "" ) TradeSmb= _Symbol ;
   Req.action= TRADE_ACTION_DEAL ;
   Req.symbol=TradeSmb;
   Req.volume= 0.1 ;
   Req.type= ORDER_TYPE_BUY ;
   Req.type_filling= ORDER_FILLING_IOC ;
   Req.price = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
   Req.sl= NormalizeDouble (sym_bid - (StopLoss*sym_point),sym_digits);
   Req.tp= NormalizeDouble (sym_ask + (TakeProfit*sym_point),sym_digits);
   Req.deviation= 3 ;
   Req.comment= "777" ;
if ( OrderSend (Req,Res))
{
       Print ( "Sent..." );
}
       Print ( "ticket =" ,Res.order, "   retcode =" ,Res.retcode);
       if (Res.order!= 0 )
     {
       datetime tm= TimeCurrent ();
       //--- request all history
       HistorySelect ( 0 ,tm);
       string comment;
       bool result= HistoryOrderGetString (Res.order, ORDER_COMMENT ,comment);
       if (result)
        {
         Print ( "ticket:" ,Res.order, "    Comment:" ,comment);
        }
Barabashka mesajınızı düzeltti
 

Bu nerede görülüyor?

 if ( OrderSend (Req,Res))

Belgelere Bakın! Ve kodu yapıştırmak için SRC düğmesini kullanın!

Çok tembelseniz, bakın, 1. ve son kez:

 int    OrderSend (
   string    symbol,               // символ
   int       cmd,                 // торговая операция
   double    volume,               // количество лотов
   double    price,               // цена
   int       slippage,             // проскальзывание
   double    stoploss,             // stop loss
   double    takeprofit,           // take profit
   string    comment= NULL ,         // комментарий
   int       magic= 0 ,             // идентификатор
   datetime expiration= 0 ,         // срок истечения ордера
   color     arrow_color= clrNONE    // цвет
   );

Öğrenmek kimseye zarar vermez!

 

Bayanlar ve Baylar!

Lütfen bana söyle.....

İşte bir fonksiyon

Sipariş Karı ( )

Bu fonksiyon, seçilen sipariş için net kar değerini döndürür.

SORU

Hangi fonksiyon, yukarıdaki fonksiyona benzer şekilde, seçilen o için kâr değil, zarar değerini döndürür.

Yani, sipariş CL tarafından 150$'lık bir kayıpla kapatılmışsa, 150$'lık bir zararı geri döndürmek için fonksiyona ihtiyacım var.

Teşekkür ederim.

 
solnce600 :

Bayanlar ve Baylar!

Lütfen bana söyle.....

İşte fonksiyon

Sipariş Karı ( )

Bu fonksiyon, seçilen sipariş için net kar değerini döndürür.

SORU

Hangi fonksiyon, yukarıdaki fonksiyona benzer şekilde, seçilen o için kâr değil, zarar değerini döndürür.

Yani, sipariş CL tarafından 150$'lık bir kayıpla kapatılmışsa, 150$'lık bir zararı geri döndürmek için fonksiyona ihtiyacım var.

Teşekkür ederim.

Aynısı! Sadece miktar eksi ile çıkacaktır.
Neden: