OrderSend() Soruları - sayfa 2

 
Yedelkin :
Muhtemelen bu başlığı gözden kaçırmıştır. KimV'nin Sipariş Verme Doğrulama özelliğini nerede bulabilirim?
4-ki içindir ama bakabilirsin işine yarayabilir. Web sitesinde "ücretsiz kütüphaneler" bölümünde bulabilirsiniz, sipariş vermek için bir kütüphane.
 
-Alexey- :
4-ki içindir ama bakabilirsin işine yarayabilir. Web sitesinde "ücretsiz kütüphaneler" bölümünde bulabilirsiniz, sipariş vermek için bir kütüphane.

dörtten itibaren çalışmayacak. Pozisyonu belirlemek için kullanıyorum

KonumSeçimi

Onunla daha fazla çalışmak için açık bir pozisyon seçer. İşlev başarıyla tamamlandıysa true döndürür. İşlev başarısız olursa false döndürür. Hata hakkında bilgi almak için GetLastError() işlevini çağırmanız gerekir.

bool PositionSelect (
    sicim    semboller       // araç adı
);

Seçenekler

semboller

[içinde] Finansal aracın adı.

Geri dönüş değeri

bool değeri.

Not

Her sembol için, bir veya daha fazla işlemin sonucu olarak, herhangi bir zamanda yalnızca bir pozisyon açılabilir. Müşteri terminalinin "Araçlar" panelindeki "Ticaret" sekmesinde de görüntülenen pozisyonlar ve aktif bekleyen emirler birbiriyle karıştırılmamalıdır.

PositionSelect() işlevi, konum verilerini ortama kopyalar ve ardından PositionGetDouble() , PositionGetInteger() ve PositionGetString() öğelerine yapılan çağrılar önceden kopyalanan verileri döndürür. Bu, pozisyonun kendisinin artık mevcut olmayabileceği (veya hacim, yön vb. olarak değiştiği) ve bu pozisyonun verilerinin hala alınabileceği anlamına gelir. Yeni konum verilerinin elde edildiğinden emin olmak için, talep edilmeden hemen önce PositionSelect() işlevinin çağrılması önerilir.

 
sergey1294 :

dörtten itibaren çalışmayacak. Pozisyonu belirlemek için PositionSelect'i kullanıyorum

PositionSelect() işlevini kullanırken, "...işlev başarısız olursa yanlış döndürmesi" rahatsız edicidir. Onlar. false, yalnızca konum yokken değil, PositionSelect() işlevinin herhangi bir hatasında döndürülür. Başka bir deyişle, OrderSend() işlevi true değerini, PositionSelect() işlevi false değerini döndürdüğünde ve pozisyon hala açık olduğunda durum hariç tutulmaz.
 
papaklass :
Bu durumları tek bir tik içinde mi yoksa farklı keneler üzerinde mi analiz ediyorsunuz?

Yani, aşağıdakilerden başlıyorum:

Kene, bir enstrümanın fiyatındaki bir değişikliktir. Bu tür değişikliklerin sıklığı tahmin edilemez: saniyede birkaç ila saatte birkaç. Buna göre, OrderSend() ve PositionSelect() işlevlerinin çalışması, kenelerin ömrüne bağlı olmamalıdır. Ve eğer öyleyse, o zaman siparişlerin tekrarının önlenmesi (ve ilgili durumların analizi) üzerindeki kontrolün, kenelerin davranışından (sıklığından) bağımsız olarak yapılması gerektiğini düşünüyorum.

Yani soruyu tam olarak cevaplamak zor :/

 
papaklass :

Sorumu sorduğumda, başka bir şey demek istedim. Bir sonraki onay geldiğinde OnTick() olay işleyicisi tetiklenir. Bunu akılda tutarak, sorumu yeniden ifade edeceğim:

Bu durumları bir OnTick() çağrısı içinde mi yoksa farklı çağrılar içinde mi analiz ediyorsunuz?

Yeni bir onay ( kullanıcı olayı ) geldikten sonra sunucuya bir ticaret talebi gönderme ihtiyacı varsa, o zaman böyle bir isteğin başarısının kontrolü, bu gelen onayın (olay) "işlenmesi içinde" gerçekleştirilir. ). Yani, terminolojinize göre, "tek bir OnTick() çağrısı içinde" [ve bu tür işleme sırasında kaç onayın (olay) geldiğine (gelmesi gerektiğine) bakılmaksızın].
 
papaklass :

Yine de tek tıkla cevap alamıyorum.OrderSend() ve PositionSelect() yapıyor musunuz?

Bu istekleri tek bir tıklama (OnTick() tetiklemesinin) içinde değil, iki tıklama içinde gerçekleştirmenizi önermek istiyorum:

- ilk tikte

onlar. istek başarıyla yanıtlanırsa, pozisyon açma bayrağını buy=true olarak ayarlarsınız ve bir sonraki tick (Optick() tetiklenir) return deyimine kadar OnTick() yürütmesini durdurursunuz.

- ikinci tikte - PositionSelect().

Bu seçenekte, açılış pozisyonlarının tekrarı olmaz.

Pozisyonun bir sonraki tıklamada zaten açılacağının garantisi yoktur, manuel olarak sipariş verirken bir pozisyonun açılmasının ne kadar sürdüğünü ölçün,

Emir yürütme kontrolünü OnTrade()'e aktarmanızı tavsiye ederim, bu olay sadece sunucudan alım satım işlemlerinin tamamlanmasıyla ilgili bir yanıt olarak oluşturulur.

Benim için çok net olmasa da neden sipariş başına 4 OnTrade() olayı var?

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 
papaklass :

Yine de tek tıkla cevap alamıyorum.OrderSend() ve PositionSelect() yapıyor musunuz?

Terminolojinize göre, OrderSend() ve PositionSelect() işlevlerimin "tek bir işaret içinde" yürütüldüğü ortaya çıktı.

papaklas :

...Bu istekleri tek bir tıklama (OnTick() tetiklemesinin) içinde değil, iki tıklama içinde gerçekleştirmenizi önermek istiyorum:

- ilk tikte

onlar. istek başarıyla yanıtlanırsa, pozisyon açma bayrağını buy=true olarak ayarlarsınız ve OnTick()'in yürütülmesini bir sonraki tik (OnTick()'in çalışması) return deyimine kadar durdurursunuz.

- ikinci tikte - PositionSelect().

Bu seçenekte, açılış pozisyonlarının tekrarı olmaz.

Önceki mesajdan biraz önce, OrderSend() ve PositionSelect() işlevlerinin yürütülmesinin kenelerin varması/gelmemesi ile hiçbir ilgisi olmadığını yazmıştım. Ve kısaca nedenini açıkladı. Bu nedenle, "ikinci tikte - PositionSelect()" kontrolü, sizi olası tüm durumlarda tekrar sipariş vermekten kesinlikle kurtarmamalıdır.

 
Urain :

Benim için çok net olmasa da neden sipariş başına 4 OnTrade() olayı var?

OnTrade() hakkında bununla ilgili bir makale vardı.

Ukrayna :

Bir sonraki tikte pozisyonun zaten açılacağının garantisi yoktur...

İşte ben de aşağı yukarı aynıyım.
 
papaklass :

Yine de tek tıkla cevap alamıyorum.OrderSend() ve PositionSelect() yapıyor musunuz?

Bu istekleri tek bir tıklama (OnTick() tetiklemesinin) içinde değil, iki tıklama içinde gerçekleştirmenizi önermek istiyorum:

- ilk tikte

onlar. istek başarıyla yanıtlanırsa, pozisyon açma bayrağını buy=true olarak ayarlarsınız ve OnTick()'in yürütülmesini bir sonraki tik (OnTick()'in çalışması) return deyimine kadar durdurursunuz.

- ikinci tikte - PositionSelect().

Bu seçenekte, açılış pozisyonlarının tekrarı olmaz.

Hayır - tik değil. 1. saniyede.

Burada basitleştirilmiş:

yani - duraklama olmadan arka arkaya 2 sipariş açacaktır. Ama ben 3 saniyeye ayarladım - ve pişman değilim))) Yine de bu bir emrin açılışı.


 void OnTimer ()
{
  while( true )
  {
     zOrderSend ( _Symbol , 0.1 , ORDER_TYPE_BUY );

     Sleep ( 1 ); 

   if ( PositionSelect ( _Symbol )== true ) { break ;} 
  }
}
 

MT5'te sipariş muhasebesi tam bir bilimdir: OnTrade() işlevini kullanarak bir Uzman Danışmanda ticaret olaylarını işlemek

Hiçbir duraklama sizi yeniden açılmaktan kurtaramaz, her zaman emrin 1 saniye daha yürütüleceği bir durum olabilir.

ps: ve sihri unutma.