Aleksey Lebedev: In PositionGet senza il PositionSelect prima.
PositionSelect è chiamato su ogni tick e prima dell'ultima uscita informativa nel blocco 3, funzionerà anche questo. Quindi questo non è ovviamente il motivo.
Yury Kirillov: Ti sbagli, PositionSelect è chiamato su ogni tick e prima dell'ultima uscita informativa nel blocco 3, funzionerà anche questo. Quindi, la ragione non è ovviamente in questo caso.
A volte mi sbaglio, ma non è questo il caso, chiaramente in questo)
Se PositionSelect(...)==falso, non ha senso PositionGet.
Quindi: dopo OrderSend i dati di posizione possono essere recuperati non immediatamente... l'asincronia è un male.
Sono felicemente d'accordo - non mi vergogno di ammettere gli errori. Ma guarda: prima di arrivare al blocco 3, proprio all'inizio dell'handler OnTick() viene chiamata la PositionSelect() da te menzionata, e non viene eseguita la OrderSend(). Nel codice ho aggiunto intenzionalmente un contatore di ritardo di 1000 tick tra l'esecuzione dei blocchi 1, 2 e 3 - si tratta di asincronia, penso che nel tester questo sia più che sufficiente per fissare la posizione. Inoltre, ho cambiato la condizione nel blocco 3:
non dovrebbe compilare... PosizioneSelezionare(_Simbolo
Corretto _Simbolo.
In conclusione: avevi ragione! Ora il blocco 3 non funziona, il che significa che la posizione non è selezionata. Grazie per il dialogo! :-)
I cucchiai sono stati ritrovati, ma i residui rimangono: se non c'è più posizione, come può il volume della posizione essere 1?
Il che non corrisponde alla documentazione:
Функция PositionSelect() копирует данные о позиции в программное окружение, и последующие вызовы PositionGetDouble(), PositionGetInteger() и PositionGetString()
возвращают ранее скопированные данные. Это означает, что самой позиции может уже и не быть (или же она изменилась по объему, направлению и т.д.),
а данные этой позиции можно еще получать. Для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelect()
непосредственно перед обращением за ними.
Quindi chiamarePositionSelect() con un risultato di false non aggiorna le informazioni sulla posizione? Peccato!
In PositionGet senza il PositionSelect prima.
Michael, facciamo un altro "foglio" con i ritardi, sta diventando noioso. :))))
Quando andrai all'inaugurazione? :)))))))
Ti sbagli, PositionSelect è chiamato su ogni tick e prima dell'ultima uscita informativa nel blocco 3, funzionerà anche questo. Quindi, la ragione non è ovviamente in questo caso.
A volte mi sbaglio, ma non è questo il caso, chiaramente in questo)
I valori dei dati di posizione al momento della chiamata di PositionSelect.
I valori non vengono aggiornati dopo OrderSend.
Se PositionSelect(...)==falso, non ha senso PositionGet.
Quindi: dopo OrderSend i dati di posizione possono essere recuperati non immediatamente... l'asincronia è un male.
A volte mi sbaglio, ma non è questo il caso, chiaramente in questo)
I valori dei dati di posizione al momento della chiamata di PositionSelect.
I valori non vengono aggiornati dopo OrderSend.
Se PositionSelect(...)==falso, non ha senso PositionGet.
Quindi: dopo OrderSend i dati di posizione possono essere recuperati non immediatamente... l'asincronia è un male.
Sono felicemente d'accordo - non mi vergogno di ammettere gli errori. Ma guarda: prima di arrivare al blocco 3, proprio all'inizio dell'handler OnTick() viene chiamata la PositionSelect() da te menzionata, e non viene eseguita la OrderSend(). Nel codice ho aggiunto intenzionalmente un contatore di ritardo di 1000 tick tra l'esecuzione dei blocchi 1, 2 e 3 - si tratta di asincronia, penso che nel tester questo sia più che sufficiente per fissare la posizione. Inoltre, ho cambiato la condizione nel blocco 3:
{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))Il risultato non è cambiato: l'ordine di chiudere la posizione viene eseguito, ma la dimensione della posizione rimane uguale a 1.
:-(
{if((gTicks>3000)&&(Step==2)&&(PositionSelect()))non dovrebbe compilare... PositionSelect(_Symbol)
non dovrebbe compilare... PositionSelect(_Symbol)
non dovrebbe compilare... PosizioneSelezionare(_Simbolo
Corretto _Simbolo.
In conclusione: avevi ragione! Ora il blocco 3 non funziona, il che significa che la posizione non è selezionata. Grazie per il dialogo! :-)
I cucchiai sono stati ritrovati, ma i residui rimangono: se non c'è più posizione, come può il volume della posizione essere 1?
Il che non corrisponde alla documentazione:
Quindi chiamarePositionSelect() con un risultato di false non aggiorna le informazioni sulla posizione? Peccato!
Quindi chiamarePositionSelect() con un risultato di false non aggiorna le informazioni sulla posizione? Peccato!
Sono passati 10 mesi ormai.....