FORTS: Yeni başlayanlara yardımcı olmak için - sayfa 4

 
Sergey Chalyshev :
Peki ya Ava? Foruma yazma şansı yok, sonsuz bir yasak.
Tamam, burada "kısmen" yasaklayabileceklerini bilmiyordum. Çok yazık.
 
Sergey Chalyshev :
Peki ya Ava? Foruma yazma şansı yok, sonsuz bir yasak.

Hayır, yasaksızdı.

Yasaklanmış kullanıcılar üstü çizili olarak yazılır.

 
Andrey Khatimlianskii :

Hayır, yasaksızdı.

Yasaklanmış kullanıcılar üstü çizili olarak yazılır.

Ben de öyle düşündüm, moderatörlere sormak daha iyi, onlar kesin olarak biliyorlar.
 
Mikhail Filimonov :

özellikler:

OrderSend() fonksiyonunun dönüş kodunda bir onay (TRADE_RETCODE_PLACED ) ve bir sipariş bileti almış olmak,

ve OnTradeTransaction() içindeki OrderSendAsync() işlevi için bu, hiç de öyle olmadığı anlamına gelmez.

sipariş aslında borsada YERLEŞTİRİLMİŞTİR.

Bu nedenle, sipariş durumunun ek bir kontrolü gereklidir (tıpkı siparişteki diğer işlemlerde olduğu gibi).

 if ( OrderSend ( request, result ) )
{
   if ( result.retcode == TRADE_RETCODE_PLACED )
  { 
    ticket = result.order;
  }
}

https://www.mql5.com/en/docs/constants/structures/mqltraderesult

Burada biletin yalnızca ticaret işlem türü TRADE_ACTION_PENDING olduğunda doldurulduğu yazıyor.

İşlem TRADE_ACTION_DEAL ise sonuç.siparişte sipariş bileti iade edilecek mi?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Evet.
 
Sergei Vladimirov :
Evet.

Ve hangi durumlarda OrderCheck() çağrısına yanıt olarak 10013 hatası oluşur?

İşte komut dosyası kodum:

   MqlTradeRequest    m_request;         
   MqlTradeCheckResult m_check_result;  
   
   m_request.action      = TRADE_ACTION_DEAL ;
   m_request.symbol      = Symbol ();
   m_request.magic       = 001 ;
   m_request.volume      = 1.00 ;
   m_request.type        = ORDER_TYPE_SELL ;
   m_request.type_filling= ORDER_FILLING_RETURN ;
   if (! OrderCheck (m_request,m_check_result))
       Print ( __FUNCTION__ + ": order check failed." );
   else
       Print ( __FUNCTION__ + ": order check passed." );
   Print ( __FUNCTION__ + ": symbol=" ,m_request.symbol, ", operation=" ,m_request.type, ", volume=" ,m_request.volume);
   Print ( __FUNCTION__ + ": retcode=" ,m_check_result.retcode, ", balance=" ,m_check_result.balance, ", equity=" ,m_check_result.equity, ", profit=" ,m_check_result.profit,
             ", margin=" ,m_check_result.margin, ", margin_free=" ,m_check_result.margin_free, ", margin_level=" ,m_check_result.margin_level,
             ", comment=" ,m_check_result.comment);

İşte aldığım günlük:

Check (RTS- 6.16 ,M30)     OnStart : retcode= 10013 , balance= 0.0 , equity= 0.0 , profit= 2.121995790965272 e- 314 , margin= 0.0 , margin_free= 0.0 , margin_level= 0.0 , comment=Invalid request
Check (RTS- 6.16 ,M30)     OnStart : symbol=RTS- 6.16 , operation= 1 , volume= 1.0
Check (RTS- 6.16 ,M30)     OnStart : order check failed.
 
igorbel :

Ve hangi durumlarda OrderCheck() çağrısına yanıt olarak 10013 hatası oluşur?

İşte komut dosyası kodum:

İşte aldığım günlük:

Yardım şunları söylese de m_request.expiration =0 eklediğimde geçti:

Değişim Yürütme

Borsa Yürütme modunda bir pozisyon açmak için bir alım satım emri (ticaret emirlerinin icrasının takas modu). 5 alan gereklidir:

  • eylem
  • semboller
  • Ses
  • tip
  • type_filling

Sihir ve yorum alanlarını da ayarlayabilirsiniz.

 

Ancak, tuhaflıklar burada bitmiyor.

1 lot Satın al:

Check (RTS-6.16,M30) OnStart: retcode=0, balance=530863.24, equity=538989.4399999999, profit=2.121995790965272e-314, margin=211242.25 , margin_free=319620.99, margin_level=255.1522907941001, comment=Done

Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=1.0

İşlem marjı 211242,25, mevcut marjla aynı - RTS-6.16'daki mevcut kısa pozisyon 2 sözleşme olduğu için her şey doğru. 1 sözleşme için başlangıç marjı RTS-6.16 17388.75

Bir sürü daha ekliyorum.

2 lot Satın al:

Check (RTS-6.16,M30) OnStart: retcode=0, balance=651428.4399999999, equity=659212.76, profit=2.121995790965272e-314, margin=211242.25 , margin_free=440186.19, margin_level=312.0648260468727, comment=Done

Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=2.0

Her şey yolunda çünkü mevcut pozisyon 2 Sat, marj değişmeden kalır.

Şimdi 3 Satın Alma sözleşmesi var:

2016.04.28 01:26:47.319 Check (RTS-6.16,M30) OnStart: retcode=0, balance=651428.4399999999, equity=658739.4, profit=2.121995790965272e-314, margin= 246019.75 , margin_free=405408.69, margin_level=267.7587470111648, comment=Done

2016.04.28 01:26:47.319 Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=3.0

Marj değeri hemen 246019.75'tir. Neresi? 1 sözleşme için sadece 17k. Peki ya diğer alanlar (önceki durumlarda da)? Bu eşitlik ve denge nereden geliyor? bende o kadar bile yok margin_free de yanlış, kardan bahsetmiyorum.

Birisi yanlış bir şey yapıp yapmadığımı kontrol edebilir mi?


 
igorbel :

Yardım şunları söylese de m_request.expiration =0 eklediğimde geçti:

Bildirimden hemen sonra tüm değişkenleri ve yapıları her zaman sıfıra sıfırlayın. Son kullanma alanında bir tür çöp vardı, bu yüzden bir hata aldınız.

 MqlTradeRequest    m_request;         
MqlTradeCheckResult m_check_result; 

ZeroMemory (m_request);
ZeroMemory (m_check_result);
// теперь заполняйте нужные поля
 
Sergei Vladimirov :

Bildirimden hemen sonra tüm değişkenleri ve yapıları her zaman sıfıra sıfırlayın. Son kullanma alanında bir tür çöp vardı, bu yüzden bir hata aldınız.

Teşekkür ederim. Ancak OrderCheck()'in terk edilmesi gerekiyordu, en azından FORTS'ta pratik olarak işe yaramaz bir işlev. İlk olarak, anlaşılmaz sonuçlar verir. Ancak değerler aşağı yukarı doğru olsa bile, siparişin borsa tarafından reddedilme olasılığı her zaman vardır. Bu nedenle ORDER_STATE_REJECTED emrinin durumuna bakmanız gerekiyor ve ayrıca yoruma da bakabilirsiniz. Ardından sırayla ses seviyesini azaltın ve tekrar gönderin. Bütün bunlar elbette ticareti hızlandırmıyor ama ne yapmalı :(