FORTS. Yürütme soruları - sayfa 59

 
Aleksey Lebedev :
Pre-PositionSelect olmadan PositionGet'te.
haklı değilsin Her işarette PositionSelect çağrılır ve 3. bloktaki son bilgi çıktısından önce de çalışır. Yani açıkça sebep bu değil.
 
ALIV :

Mikhail, gecikmeli başka bir "sayfa" alalım, yoksa bir şeyler sıkıcı hale geldi. :))))

Discovery'ye ne zaman gideceksin? :)))))))

Yeni bir şey yok :)

 
Yury Kirillov :
haklı değilsin Her tikte PositionSelect çağrılır ve 3. bloktaki son bilgi çıktısından önce de çalışır. Yani açıkça sebep bu değil.

Bazen hata yapıyorum ama durum bu değil açıkçası bunda)

PositionSelect'in çağrıldığı andaki konum verisi değerleri yazdırılacaktır.

OrderSend sonrası değerler güncellenmez.

PositionSelect(...)==false ise, PositionGet'te bir nokta yoktur.


Not: OrderSend'den sonra pozisyon bilgisi hemen alınamayabilir.. uyumsuzluk hala kötü.

 
Aleksey Lebedev :

Bazen hata yapıyorum ama durum bu değil açıkçası bunda)

PositionSelect'in çağrıldığı andaki konum verisi değerleri yazdırılacaktır.

OrderSend sonrası değerler güncellenmez.

PositionSelect(...)==false ise, PositionGet'te bir nokta yoktur.


Not: OrderSend sonrası pozisyon verisi hemen alınamayabilir.. uyumsuzluk hala kötü.

Memnuniyetle katılıyorum - hataları kabul etmekten utanmıyorum. Ama bakın: Blok 3'e girmeden önce, OnTick() işleyicisinin en başında, bahsettiğiniz PositionSelect() çağrılır, ancak OrderSend() yürütülmez. Kod özellikle blok 1, 2 ve 3'ün yürütülmesi arasına 1000 tiklik bir gecikme sayacı ekledi - bu eşzamansızlık içindir, bence bu, test cihazında konumu düzeltmek için fazlasıyla yeterli. Ek olarak, Blok 3'teki koşulu değiştirdim:

   { if ((gTicks> 3000 )&&(Step== 2 )&&( PositionSelect ()))
   {
       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))

Sonuç değişmedi: pozisyonu kapatma emri uygulandı ve pozisyon büyüklüğü 1'e eşit kaldı.

 2015.10 . 27 18 : 55 : 14.986 2015.10 . 26 10 : 00 : 02    INFO>> *** VOLUME= 1.0 *** ID= 2 *** TYPE= POSITION_TYPE_SELL *** OrdersTotal ()= 0

:-(

 
   { if ((gTicks> 3000 )&&(Step== 2 )&&( PositionSelect ()))

derlememelidir.. PositionSelect (_Symbol)

 
Aleksey Lebedev :

derlememelidir.. PositionSelect(_Symbol)

Evet, derlemedi - programın eski kopyası başlatıldı ...
 
Aleksey Lebedev :

derlememelidir.. PositionSelect(_Symbol)

_Symbol düzeltildi

Ve sonunda: Haklıydın! Şimdi blok 3 çalışmıyor, bu da konumun seçilmediği anlamına geliyor. Diyalog için teşekkürler! :-)

Kaşıklar bulundu, ancak tortu kaldı: daha fazla pozisyon yoksa, pozisyonun hacmi nasıl 1'e eşit olabilir?

Belgelere uymayan şey:

Функция PositionSelect () копирует данные о позиции в программное окружение, и последующие вызовы PositionGetDouble (), PositionGetInteger () и PositionGetString () 
возвращают ранее скопированные данные. Это означает, что самой позиции может уже и не быть (или же она изменилась по объему, направлению и т.д.), 
а данные этой позиции можно еще получать. Для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelect () 
непосредственно перед обращением за ними.

Yani PositionSelect'i () yanlış bir sonuçla çağırmak konum bilgisini güncellemez mi? Üzüntü!

 
Yury Kirillov :

Yani PositionSelect'i () yanlış bir sonuçla çağırmak konum bilgisini güncellemez mi? Üzüntü!

Evet. Ama prensipte mantıklıdır ( PositionSelect () == false) - pozisyon yoktur ve onu her türlü PositionGet ile sorgulamaya gerek yoktur)
 
Bir pozisyon eksik olduğunda tampondaki çöpleri temizlemek daha mantıklı gibi geliyor bana. Yani, herkes için...
 
Михаил :
10 ay oldu bile...
Yeterli değil .... daha fazlasını bekleyebilirsiniz ...