요새. 실행 질문 - 페이지 59

 
Aleksey Lebedev :
Pre-PositionSelect가 없는 PositionGet에서.
당신이 옳지 않다. PositionSelect는 매 틱마다 호출되며 블록 3의 마지막 정보 출력 전에도 작동합니다. 그래서 그것은 분명히 이유가 아닙니다.
 
ALIV :

Mikhail, 지연이 있는 또 다른 "시트"가 있습니다. 그렇지 않으면 뭔가 지루해집니다. :)))))

디스커버리 언제 가세요? :))))))))

거기에 새로운 것은 없습니다 :)

 
Yury Kirillov :
당신이 옳지 않다. PositionSelect는 매 틱마다 호출되며 블록 3의 마지막 정보 출력 전에도 작동합니다. 그래서 그것은 분명히 이유가 아닙니다.

가끔 실수를 하기도 하지만, 이건 그렇지 않다, 분명히 이 경우는)

PositionSelect 가 호출된 시점의 위치 데이터 값이 인쇄됩니다.

값은 OrderSend 후에 업데이트되지 않습니다.

PositionSelect(...)==false이면 PositionGet에 점이 없습니다.


추신: OrderSend 후 위치 데이터를 즉시 얻지 못할 수 있습니다. 비동기는 여전히 악입니다.

 
Aleksey Lebedev :

가끔 실수를 하기도 하지만, 이건 그렇지 않다, 분명히 이 경우는)

PositionSelect 가 호출된 시점의 위치 데이터 값이 인쇄됩니다.

값은 OrderSend 후에 업데이트되지 않습니다.

PositionSelect(...)==false이면 PositionGet에 점이 없습니다.


추신: OrderSend 후 위치 데이터를 즉시 얻지 못할 수 있습니다. 비동기는 여전히 악입니다.

나는 기꺼이 동의합니다 - 나는 실수를 인정하는 것을 부끄러워하지 않습니다. 하지만 보세요. 블록 3에 들어가기 전에 OnTick() 핸들러의 맨 처음에 언급한 PositionSelect()가 호출되고 OrderSend()는 실행되지 않습니다. 코드는 특히 블록 1, 2, 3 실행 사이에 1000틱의 지연 카운터를 추가했습니다. 이것은 비동기를 위한 것입니다. 테스터에서 위치를 수정하기에 충분하다고 생각합니다. 또한 블록 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))

결과는 변경되지 않았습니다. 포지션을 청산하라는 명령이 실행되고 포지션 크기는 1과 동일하게 유지됩니다.

 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 ()))

컴파일하면 안 됩니다.. PositionSelect (_Symbol)

 
Aleksey Lebedev :

컴파일하면 안 됩니다.. PositionSelect(_Symbol)

예, 컴파일되지 않았습니다. 프로그램의 이전 복사본이 시작되었습니다...
 
Aleksey Lebedev :

컴파일하면 안 됩니다.. PositionSelect(_Symbol

수정된 _기호

그리고 결국: 당신이 옳았습니다! 이제 블록 3이 작동하지 않습니다. 이는 위치가 선택되지 않았음을 의미합니다. 대화 감사합니다! :-)

숟가락은 발견되었지만 침전물은 남아있었습니다. 더 이상 위치가 없으면 위치의 부피가 어떻게 1과 같을 수 있습니까?

문서로 옳지 않은 것:

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

따라서 잘못된 결과로 PositionSelect ()를 호출해도 위치 정보가 업데이트되지 않습니까? 비애!

 
Yury Kirillov :

따라서 잘못된 결과로 PositionSelect ()를 호출해도 위치 정보가 업데이트되지 않습니까? 비애!

네. 그러나 원칙적으로는 논리적입니다( PositionSelect () == false) - 위치가 없으며 모든 종류의 PositionGet으로 질문할 필요가 없습니다.
 
위치가 누락되었을 때 버퍼의 쓰레기를 지우는 것이 더 논리적일 것 같습니다. 그래서 모두를 위해...
 
Михаил :
벌써 10개월째...
충분하지 않습니다 .... 더 많이 기다릴 수 있습니다 ...