전문 고문 - 기타 질문 - 페이지 23

 

난 그것을 추천 해.

이러한 모든 문제를 해결할 때쯤이면 자신을 전문가라고 생각할 수 있습니다.

가능한 한 어려운 일을 하면 가장 많이 배우게 될 것입니다.

그렇지 않으면 당신은 항상 간단한 일에 어려움을 겪습니다.

 

우선 귀하의 의견에 진심으로 감사드립니다.

귀하의 의견을 듣고 확실히 테스트를 위해 주문 수정 코드 블록을 다시 한 번 생성해야 한다고 결정했습니다.

 

@Marco vd Heijden

귀하의 가장 큰 코멘트/예제 이후 - 저는 이미 Take Profit Price에 대한 드래그 코드를 작성했습니다.
하지만 사실 저는 지속적인 업데이트를 반대합니다. 왜요? Take Profit 드래그에 대한 코드 블록을 작성하기 때문에 차트가 느리게 표시됩니다. 코드의 그 부분에서 실수를 했을 수도 있습니다. 이 문제를 해결한 후 확인하겠습니다.

(혼자서 문제를 해결하려고 하는 동안 여러 번 시도한 후 "for" 루프 연산자를 사용하면 계산을 멈출 기회가 없다고 생각했습니다)

        나는 이미 아래 코드에서 " Switch " 연산자를 제거한 이익실현 및 손절매 크기에 대한 계산이 있음을 언급하고 싶습니다.
나는 이익실현 가격이 " 라인 " 가격과 같을 때 시도하고 있습니다. 그런 다음 다음 시간 이익실현 가격 " != " 라인 가격까지 계산/업데이트를 중지합니다.
Q:
문제에 대해 아래 코드를 수정하는 데 어려움을 겪고 있습니다. 그래서 무엇을 할 수 있습니까?
Q: 이 문제에 대해 " 스위치 " 연산자를 사용하지 않고 제가 잘못하고 있습니까?

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   for ( int order= OrdersTotal (); order>= 0 ; order--)
     {
       bool selected= OrderSelect (order, SELECT_BY_POS );
        {
         if (selected== 1 )
           {
             if ( Symbol ()== OrderSymbol ()) // only for current chart symbol
              {
               /* I just try for - if price not equal != "Line OBJPROP_PRICE "
                  stop updates */


               // if objects not found - create them
               // ...
               // if objects exist
               // ...
               while (price!= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 ))
                 {
                   PlaySound ( "ok.wav" );
                  price= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 );
                   Comment (price);
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+

예제와 함께 OrderModify()에 대한 설명서와 책을 읽는 동안 제 관심사에 맞는 예제를 보지 못했습니다.

당신에게 최선을 다합니다!

 

나는 스레드에 대한 최신 정보를 유지하지 않았기 때문에 당신이하고있는 것을 놓쳤을 수 있습니다.

우선 다음을 단순화하십시오.

for ( int order= OrdersTotal (); order>= 0 ; order--)
     {
       bool selected= OrderSelect (order, SELECT_BY_POS );
        {
         if (selected== 1 )
다음과 같아야 합니다.
for ( int order= OrdersTotal ()- 1 ; order>= 0 ; order--)
     {
       if ( OrderSelect (order, SELECT_BY_POS )

또한 라인을 얼마나 자주 이동하는지 생각해 보십시오. 1초에 한번인가요? 아마 아닐 것입니다.

OnChartEvent()에 코드를 넣습니다.

void OnChartEvent ( const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   if (id== CHARTEVENT_OBJECT_DRAG && sparam== "line" ) // the chart event of dragging the line

열려 있는 모든 주문에 대해 동일한 함수 를 여러 번 호출하고 있습니다.

while (price!= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 ) )
  {
   PlaySound ( "ok.wav" );
   price= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 ) ;
   Comment (price);
  }

주문 루프에 들어가기 전에 한 번 호출하십시오.

double lineprice= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 );
for ( int order= OrdersTotal ()-1; order>= 0 ; order--)
  {  
 

while 루프의 원리를 이해했는지 확인하십시오.

어떤 이유에서든 다른 EA 가 라인 가격 값을 수정하려고 하면 결과적으로 이 코드 조각이 무한 루프에 빠져 터미널이 정지될 가능성이 높기 때문에 위험합니다.

이것은 일반적으로 비정상 종료로 끝납니다.

개체 "라인"을 사용하고 있기 때문에 위험은 OrderModify()에 의해 서버로 전송되는 tp 및 sl 레벨에 대해 이야기할 때만큼 크지 않으므로 "라인"을 방해하는 다른 EA를 작성할 계획이 아니라면 문제가되어서는 안됩니다.

 
honest_knave :

나는 스레드에 대한 최신 정보를 유지하지 않았기 때문에 당신이하고있는 것을 놓쳤을 수 있습니다.


주문 루프에 들어가기 전에 한 번 호출하십시오.

double lineprice= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 );
for ( int order= OrdersTotal (); order>= 0 ; order--)
  {  

그가 무엇을 하려는지 이해해 주십시오.

그는 라인이 이동되었는지 확인하기 위해 두 번 호출하고 값을 비교해야 합니다.

값을 두 번 읽지 않고는 불가능합니다.

while (price!= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 )) // if price differs from "line" value do:
  {
   PlaySound ( "ok.wav" );
   price= ObjectGetDouble ( 0 , "line" , OBJPROP_PRICE , 0 ); // now overwrite old line value with new line value.
   Comment (price);
  }
 
Marco vd Heijden :

그가 무엇을 하려는지 이해해 주십시오.

그는 라인이 이동되었는지 확인하기 위해 두 번 호출하고 값을 비교해야 합니다.

값을 두 번 읽지 않고는 불가능합니다.

저에게 다시 설명해 주셔야 합니다.

CHARTEVENT_OBJECT_DRAG가 있고 Sparam 이 "라인"이면 해당 라인이 이동한 것입니다.

드문 경우지만 같은 가격으로 시간에 따라 움직이므로 패널티가 크지 않습니다.

 

동일한 작업을 수행하는 방법은 여러 가지가 있습니다.

CHARTEVENT를 사용하기로 결정했다면 테스터에서 작동하지 않는다는 것을 기억하십시오.

 
알겠습니다. 여러분에게 맡기겠습니다. 행운을 빕니다.
 

나는 이미 귀하의 유익한 의견을 읽었습니다. Mr. Marco, Mr. Knave, Mr. William, 그 모든 의견에 감사드립니다!

이제 나는 이미 몇 가지를 확인했고 또한 OrderModify()를 단계별로 작성(/확인)할 수 있다고 결정했습니다. 이 OrderModify()는 나에게 정말 위험하기 때문입니다.
여러 번 나는 이미 잘못된 수정에 직면했습니다. 그러나 동일한 문제/문제에 직면하려고 할 때 그 문제가 어디에서 오는지 확실히 알고 있는데도 차트에서 문제/문제가 다시 발생하지 않았다는 동일한 일을 시도합니다. 몇 시간 후에 나는 같은 문제에 다시 직면했습니다.
나는 아직도 그 문제의 원인이 정확히 무엇인지 모릅니다. 내가 의미하는 문제는 무엇입니까? 이전 댓글에서 이미 그 중 하나를 공유했습니다. 또한 저는 트레이드 패널 EA에서 한 포지션을 열었습니다. OK입니다! 그런 다음 수동 거래 방식으로 Sell Limit을 열려고 합니다. (내 트레이드 패널에는 아직 판매 제한 또는 판매 중지 보류 주문이 없습니다)

그래서 그 블록 코드를 여러분과 공유해야 한다고 생각하지만 아직 작업 중이기 때문에 지금은 공유할 수 없습니다. 블록의 해당 코드를 OnChartEvent()로 이동하고 싶습니다. 또한 일부 버튼을 추가할 것이기 때문입니다.

문제: 주문이 마감된 다음 개체를 제거하면 코드를 작성할 수 없습니다. 예를 들어 손절매, 이익 실현, 열기, 닫기 화살표와 같은 것입니다. 도와주세요.
질문: 또한 손절매, 트레이드 패널 개체 앞에서 이익을 취하십시오. 지난 시간으로 인해 개체가 생성된다는 것을 알고 있습니다. 그러나 저를 이해하신다면 "손절매 및 이익실현" 라인 없이 Trade Panel 객체가 다른 모든 객체 앞에 있어야 하는 방법을 알려주십시오.

미리 감사드립니다.