Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 463

 

Konum hacminin 0'a (sıfır) eşit olması nasıl sağlanır? (FORTS, Otkritie-Broker, Gerçek)

Aşağıdaki kod var:

 #property strict
long      gTicks= 0 ;
int       Step= 0 ;
//=====
void OnTick ()
{
   gTicks++;
   PositionSelect ( _Symbol );
   //-----
   { if ((gTicks> 1000 )&&(Step== 0 ))
   {
       Print ( "OPEN>> *** VOLUME=" , PositionGetDouble ( POSITION_VOLUME ),
                         " *** ID=" , PositionGetInteger ( POSITION_IDENTIFIER ),
                         " *** TYPE=" , EnumToString (( ENUM_POSITION_TYPE ) PositionGetInteger ( POSITION_TYPE )),
                         " *** OrdersTotal()=" , OrdersTotal ());
       MqlTradeRequest request={ 0 };                                   //Обнулим записи запроса
       MqlTradeResult result={ 0 };                                     //Обнулим записи ответа
      request.action= TRADE_ACTION_PENDING ;                           //Отложенный ордер
      request.symbol= _Symbol ;                                         //Инструмент
      request.price= SymbolInfoDouble ( _Symbol , SYMBOL_BID );             //Прайс (цена) исполнения ордера
      request.type= ORDER_TYPE_SELL_STOP ;                             //Тип ордера
      request.type_filling= ORDER_FILLING_RETURN ;                     //Разрешить исполнять частями (ORDER_FILLING_RETURN)
      request.type_time= ORDER_TIME_SPECIFIED_DAY ;                     //В очереди до экспирации
      request.expiration=
         ( datetime ) SymbolInfoInteger ( _Symbol , SYMBOL_EXPIRATION_TIME ); //Время истечения фьючерсного контракта
      request.volume= 1 ;                                               //Объем
       Print ( "OPEN OrderSend=" , OrderSend (request,result));
       Print ( "OPEN Retcode=" ,result.retcode);
       Print ( "OPEN Order=" ,result.order);
       Print ( "OPEN Deal=" ,result.deal);
       Print ( "OPEN OrdersTotal()=" , OrdersTotal ());
       Print ( "OPEN Volume=" , PositionGetDouble ( POSITION_VOLUME ));
      Step= 1 ;
       return ;
   }} //if((gTicks>1000)&&(Step==0))
   //-----
   { if ((gTicks> 2000 )&&(Step== 1 ))
   {
   Print ( "CLOSE>> *** VOLUME=" , PositionGetDouble ( POSITION_VOLUME ),
                     " *** ID=" , PositionGetInteger ( POSITION_IDENTIFIER ),
                     " *** TYPE=" , EnumToString (( ENUM_POSITION_TYPE ) PositionGetInteger ( POSITION_TYPE )),
                     " *** OrdersTotal()=" , OrdersTotal ());
       MqlTradeRequest request={ 0 };                                   //Обнулим записи запроса
       MqlTradeResult result={ 0 };                                     //Обнулим записи ответа
      request.action= TRADE_ACTION_DEAL ;                               //Отложенный ордер
      request.symbol= _Symbol ;                                         //Инструмент
      request.price= SymbolInfoDouble ( _Symbol , SYMBOL_ASK );             //Прайс (цена) исполнения ордера
      request.type= ORDER_TYPE_BUY ;                                   //тип ордера
      request.type_filling= ORDER_FILLING_FOK ;                         //Исполнять только в полном объёме
      request.type_time= ORDER_TIME_DAY ;                               //В очереди до снятия
      request.volume= 1 ;                                               //Объем Правильно
       Print ( "CLOSE OrderSend=" , OrderSend (request,result));
       Print ( "CLOSE Retcode=" ,result.retcode);
       Print ( "CLOSE Order=" ,result.order);
       Print ( "CLOSE Deal=" ,result.deal);
       Print ( "CLOSE OrdersTotal()=" , OrdersTotal ());
       Print ( "CLOSE Volume=" , PositionGetDouble ( POSITION_VOLUME ));
      Step= 2 ;
       return ;
   }} //if((gTicks>2000)&&(Step==1))        
   //-----   
   { if ((gTicks> 3000 )&&(Step== 2 ))
   {
       Print ( "INFO>> *** VOLUME=" , PositionGetDouble ( POSITION_VOLUME ),
                         " *** ID=" , PositionGetInteger ( POSITION_IDENTIFIER ),
                         " *** TYPE=" , EnumToString (( ENUM_POSITION_TYPE ) PositionGetInteger ( POSITION_TYPE )),
                         " *** OrdersTotal()=" , OrdersTotal ());
      Step= 3 ;
       return ;
   }} //if((gTicks>3000)&&(Step==2))
   { if ((gTicks> 4000 )&&(Step== 3 ))
   {
       ExpertRemove ();
   }} //if((gTicks>4000)&&(Step==3))
} //OnTick()

Yani emir ile pozisyon açıp ters sıra ile kapatıyoruz ve sonuç olarak pozisyon hacmine bakıyoruz.

Beklenen 0 (sıfır), elimizde 1 (bir) var. Aşağıdaki günlükler (alttan başlayarak).

 2015.10 . 27 16 : 28 : 11.476 2015.10 . 26 10 : 05 : 08    ExpertRemove () function called
2015.10 . 27 16 : 28 : 11.465 2015.10 . 26 10 : 03 : 14    INFO>> *** VOLUME= 1.0 *** ID= 2 *** TYPE= POSITION_TYPE_SELL *** OrdersTotal ()= 0
2015.10 . 27 16 : 28 : 11.450 2015.10 . 26 10 : 01 : 47    CLOSE Volume= 1.0
2015.10 . 27 16 : 28 : 11.450 2015.10 . 26 10 : 01 : 47    CLOSE OrdersTotal ()= 0
2015.10 . 27 16 : 28 : 11.450 2015.10 . 26 10 : 01 : 47    CLOSE Deal= 3
2015.10 . 27 16 : 28 : 11.450 2015.10 . 26 10 : 01 : 47    CLOSE Order= 3
2015.10 . 27 16 : 28 : 11.450 2015.10 . 26 10 : 01 : 47    CLOSE Retcode= 10009
2015.10 . 27 16 : 28 : 11.450 2015.10 . 26 10 : 01 : 47    CLOSE OrderSend = true
2015.10 . 27 16 : 28 : 11.449 2015.10 . 26 10 : 01 : 47    order performed buy 1.00 at 9249 [ # 3 buy 1.00 SBRF- 12.15 at 9249 ]
2015.10 . 27 16 : 28 : 11.449 2015.10 . 26 10 : 01 : 47    deal performed [ # 3 buy 1.00 SBRF- 12.15 at 9249 ]
2015.10 . 27 16 : 28 : 11.449 2015.10 . 26 10 : 01 : 47    deal # 3 buy 1.00 SBRF- 12.15 at 9249 done (based on order # 3 )
2015.10 . 27 16 : 28 : 11.449 2015.10 . 26 10 : 01 : 47    exchange buy 1.00 SBRF- 12.15 at 9249 ( 9242 / 9249 / 9242 )
2015.10 . 27 16 : 28 : 11.449 2015.10 . 26 10 : 01 : 47    CLOSE>> *** VOLUME= 1.0 *** ID= 2 *** TYPE= POSITION_TYPE_SELL *** OrdersTotal ()= 0
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    order performed sell 1.00 at 9205 [ # 2 sell stop 1.00 SBRF- 12.15 at 9205 ]
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    deal performed [ # 2 sell 1.00 SBRF- 12.15 at 9205 ]
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    deal # 2 sell 1.00 SBRF- 12.15 at 9205 done (based on order # 2 )
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    order [ # 2 sell stop 1.00 SBRF- 12.15 at 9205 ] triggered
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN Volume= 0.0
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN OrdersTotal ()= 1
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN Deal= 0
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN Order= 2
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN Retcode= 10009
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN OrderSend = true
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    sell stop 1.00 SBRF- 12.15 at 9205 ( 9205 / 9227 / 9205 )
2015.10 . 27 16 : 28 : 11.422 2015.10 . 26 10 : 00 : 57    OPEN>> *** VOLUME= 0.0 *** ID= 0 *** TYPE= POSITION_TYPE_BUY *** OrdersTotal ()= 0
2015.10 . 27 16 : 28 : 11.344 SBRF- 12.15 ,M1: testing of Experts\Projects\CoinAge5\Helper_v01\mq5\Tst\TST006_Open_Close_Positions_001.ex5 from 2015.10 . 26 00 : 00 to 2015.10 . 27 00 : 00 started

Sebebi ne?

 
Yury Kirillov :

Konum hacminin 0'a (sıfır) eşit olması nasıl sağlanır? (FORTS, Otkritie-Broker, Gerçek)

Aşağıdaki kod var:

Yani emir ile pozisyon açıp ters sıra ile kapatıyoruz ve sonuç olarak pozisyon hacmine bakıyoruz.

Beklenen 0 (sıfır), elimizde 1 (bir) var. Aşağıdaki günlükler (alttan başlayarak).

Sebebi ne?

İlginiz için teşekkür ederim! Bir sonraki şubede açıklama geldi. :-)
 
Alexey Viktorov :
Oldukça doğru. Bu formülü yazdığımda SL'm belirli bir değerle belirlenmedi, emir açılış fiyatı ile belirli bir seviye arasındaki fark olarak kabul edildi, bu yüzden risk tutarını _Puan ile çarpmak zorunda kaldım.
O zaman bölmek gerekir, çarpmak değil
 

Herkese merhaba! Bir sorunla baş edemiyorum... Yardım Lütfen!!! Martingale (2SS) ile bir Uzman Danışman vardı, neredeyse her şeyi tamamen yeniden düzenledi - şimdi Trend'e göre de açılıyor. Ayrı olarak kapatılan emirlerin birikmiş karını sayan ve tüm seri kapatıldığında ve özellikle 1. açık emir olduğunda "0"a sıfırlanan bir blok vardır. Şimdi bu 1. sipariş her an kapatılabilir... ve birikmiş kar sıfırlanır. AMAÇ: Bu bayrağı (açık seri), bu bayrağın "görünümünden" sonra TÜM siparişler kapanana kadar tutun. Kaynakta şöyle görünüyordu:

   if ( OrderSelect (TicketB[totb- 1 ],SELECT_BY_TICKET)) TimeB=OrderOpenTime();
   if ( OrderSelect (TicketS[tots- 1 ],SELECT_BY_TICKET)) TimeS=OrderOpenTime();
....... //...........//...........//............//............//........
         if (! OrderSelect (k,SELECT_BY_POS,MODE_HISTORY)) break ;
         if ((OrderOpenTime()<TimeB || totb== 0 ) && (OrderOpenTime()<TimeS || tots== 0 )) break ;
         if (OrderSymbol()== Symbol ())
           {
             if ((OrderMagicNumber()==magicbuy || OrderMagicNumber()==magicbuyTrEnd) && OrderType()==OP_BUY  && OrderOpenTime()>TimeB) ProfitBuyN  += OrderProfit()+OrderSwap()+OrderCommission();
             if ((OrderMagicNumber()==magicsell || OrderMagicNumber()==magicsellTrEnd) && OrderType()==OP_SELL && OrderOpenTime()>TimeS) ProfitSellN += OrderProfit()+OrderSwap()+OrderCommission();
           }

Şimdiden teşekkürler!!!

 
Artyom Trishkin :
O zaman bölmek gerekir, çarpmak değil
Benim versiyonuma dikkatlice bakmadınız, gerçekten de doğru seçenek olmasına rağmen, çarpmayı bırakmadınız, ancak 5-6 yıl sonra zaten mantıksız görünen parayı çoğalttınız, ancak sonuç doğru. Ve bunca yıl buna geri dönmedim, bunun hangi Uzman Danışmanda yapıldığını zar zor buldum. Onu bulduğumda, zaten iki mesaj yazmışsın :)))
 
Alexey Viktorov :
Benim versiyonuma dikkatlice bakmadınız, gerçekten de doğru seçenek olmasına rağmen, çarpmayı bırakmadınız, ancak 5-6 yıl sonra zaten mantıksız görünen parayı çoğalttınız, ancak sonuç doğru. Ve bunca yıl buna geri dönmedim, bunun hangi Uzman Danışmanda yapıldığını zar zor buldum. Onu bulduğumda, zaten iki mesaj yazmışsın :)))

Ve bir akıllı telefondan ;)

Genel olarak, elbette garip. Durma değerini puan olarak yazarsam, 300'dür (onun örneğinde). _Point ile çarpmış, sonuç olarak beş basamaklı tırnak işaretleri ile puan cinsinden durma değeri 300*0.00001=0.003 olmuştur.

İyi. İstenen kapanış fiyatı ile açılış fiyatı arasındaki fark 0,003 (fiyat olarak) ise neden onu çarparak 0,00000003 puan aldı. Bölseydim, olması gerektiği gibi 300 alırdım.

Genel olarak, bir akıllı telefondan cevap verdim, başlangıçta soru soran kişiye değil, size zaten cevap verdiğimi bile fark etmeden;)

 
Artyom Trishkin :

Ve bir akıllı telefondan ;)

Genel olarak, elbette garip. Durma değerini puan olarak yazarsam, 300'dür (onun örneğinde). _Point ile çarpmış, sonuç olarak beş basamaklı tırnak işaretleri ile puan cinsinden durma değeri 300*0.00001=0.003 olmuştur.

İyi. İstenen kapanış fiyatı ile açılış fiyatı arasındaki fark 0,003 (fiyat olarak) ise neden onu çarparak 0,00000003 puan aldı. Bölseydim, olması gerektiği gibi 300 alırdım.

Genel olarak, bir akıllı telefondan cevap verdim, başlangıçta soru soran kişiye değil, size zaten cevap verdiğimi bile fark etmeden;)

Ve şimdi zaten akşam yemeği yedim ve ne yaptığı umurumda değil. :)))

Önemli olan birbirimizi anlamamız... :)))))))))))))))))

 
Alexey Viktorov :

Ve şimdi zaten akşam yemeği yedim ve ne yaptığı umurumda değil. :)))

Önemli olan birbirimizi anlamamız... :)))))))))))))))))

Birbirinizi anladığınıza çok sevindim)) Ve benim için hala oldukça genç, neyin bölüneceği ve çarpılacağı hiç net değil. Lütfen bilgi konusunda yardım edin, makaleye bağlantı vermekten memnuniyet duyacağım, parmaklarda basit bir açıklama, herhangi bir yardım için minnettarım.
 
Alexey Viktorov :

Ve şimdi zaten akşam yemeği yedim ve ne yaptığı umurumda değil. :)))

Önemli olan birbirimizi anlamamız... :)))))))))))))))))

anlaşıldı beyler :)

double Test=100/(300*SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE ));

Bu şekilde çalışıyor, hepinize teşekkürler)

 
PabloEs :

anlaşıldı beyler :)

double Test=100/(300*SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE ));

Bu şekilde çalışıyor, hepinize teşekkürler)

Görüyorsun, yemek yedim ve sen 11 dakikada yaptın. :)))