공개 거래 확인 문제 - 페이지 2

 
dazamate :


 int start(){
   static datetime Time0;
   if (Time0 == Time[ 0 ]) return ; Time0 = Time[ 0 ];
   // A new bar has started.

WHRoeder, 이 코드는 매우 간단해 보이지만 어떻게 작동하는지 머리로는 이해할 수 없습니다. time0이 time[0]과 같을 때마다 time0을 time[0]과 같게 하면 if 문은 항상 참이 되지 않을까요? 작동하지 않는다는 말은 아니지만 어떻게 작동하는지 이해하지 못합니다.

첫 번째 틱: Time0Time[ 0 ] 과 같지 않으므로 반환이 실행되지 않고 Time0Time[ 0 ] (현재 막대의 시작 시간)으로 설정되어 나머지 시작 기능 이 실행됩니다.

두 번째 및 후속 틱: Time0 이 여전히 현재 막대의 시작 시간과 같으면 여전히 동일한 막대에 있고 return이 실행되고 시작 기능이 종료됩니다. Time0 이 현재 막대의 시작 시간과 같지 않으면 새 막대에 있고 반환이 실행되지 않고 Time0Time[ 0 ] (새 현재 막대의 시작 시간)으로 설정되어 시작 기능의 나머지 부분이 실행됩니다. .

 
dazamate :

보류 중인 주문이 있고 x 양의 막대로 트리거되지 않으면 취소되는 카운터를 만드는 방법은 무엇입니까? 내가 생각해낼 수 있는 것은 새 막대가 형성될 때마다 계산하는 카운터를 놓고 계산된 막대의 양 == 보류 중인 주문이 취소되기 전에 지정된 허용 막대를 계산하는 것입니다. 새로운 보류 주문이 열릴 때마다 바 카운터가 재설정됩니까? 어떻게 들리나요?

보류 중인 주문 을 확인하는 기능을 만들겠습니다. 각 주문이 언제 열렸는지 확인하고, 얼마나 오래 지속되었는지 확인하고, 시간 제한보다 길면 주문을 닫습니다.

 
dazamate :

1시간 tf에 eurusd, usdchf, gbpusd, usdjpy를 스캔하는 함수를 만들고 싶습니다. 마지막 06:00 gmt 양초로 돌아가서 시가를 기록하고 이전 06:00 gmt 양초 기록으로 돌아가서 각 쌍에 대해 6gmt -6gmt 범위를 기록합니다. 그런 다음 모든 쌍의 6gmt - 6gmt 범위를 비교하고 가장 높은 값을 반환합니다. ea가 1번 타임차트에 붙은걸로 가능한가요?

이와 같은 모든 문제는 코드에 대해 생각하기 전에 먼저 솔루션을 파악해야 합니다. . IMO. 순서도를 작성하거나 의사 코드를 작성하십시오. . . 먼저 의미가 있는 솔루션을 얻으십시오. . 그런 다음 코드를 보십시오.

마지막 질문에 답하자면 그렇습니다. 예를 들어 특정 양초의 미결 값을 다른 쌍에서 EA가 켜져 있는 값으로 가져오기 위해 제가 사용할 수 있습니다. . .

iOpen( string symbol, int timeframe, int shift)

4 쌍의 분노에 대한 값을 얻으면 다음과 같이 가장 큰 값을 쉽게 결정할 수 있습니다.

   MathMax ( double value4, ( MathMax ( double value3, ( MathMax ( double value1, double value2))))) ;

. . . 또는 값을 배열에 넣고 ArraySort를 사용할 수 있습니다. . . 일반적으로 어떤 일을 하는 데는 한 가지 이상의 방법이 있습니다. 먼저 문제를 해결하는 방법에 대한 계획을 세워야 합니다.

편집: 이 항목 중 일부는 전략 테스터 에서 제대로 작동하지 않는다는 점을 명심하십시오.

 
extern int      iOpenHour                = 6 ;

int start()
  {
  
int b, scannedhour;
datetime bartime;
double dibsclose, dibsopen, prevdayrange;

for (b= 0 ; b<= 24 ; b++)                                   // scans the last 24 bars 
   {
      bartime = iTime ( "EURUSD" , 60 , b);                 // checks the open time of each bar
      scannedhour = TimeHour (bartime);                 // extracts the hour of that bar
    
       if ( scannedhour == iOpenHour )                   // Check to see if scanned hour = Dibs hour
         {
            dibsclose    = iOpen ( "EURUSD" , 60 , b);     // Get the open value of that bar (Close of 6gmt day) 
            dibsopen     = iOpen ( "EURUSD" , 60 , b- 24 );   // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange = (dibsclose-dibsopen);       // Calculate the range of the Dibs day
         }                                             // End of if statement
    }                                                   // End of for statement


Comment ( "Prev Dibs day range is..." ,prevdayrange, "dibsclose  =  " , dibsclose, "dibsopen  =  " ,dibsopen, "Scannedhour=" ,scannedhour);      


   return ( 0 );
  }

좋아, 이것은 마지막 06:00 막대를 찾을 때까지 eurusd 1시간 차트를 스캔하고 열려 있는 것을 기록하고 다른 24 막대로 돌아가 해당 막대의 시작을 기록하는 코드를 작성하려는 내 자신의 시도입니다(06:00 시작일 ) 및 2개의 선택된 막대에서 열린 열린 범위를 가져옵니다.

놀랍게도 작동하지 않습니다. ㅋㅋ ------> http://myfacewhen.com/307/

내가 무슨 짓을 했는지 말해줘. 아니면 제가 이 문제에 대해 잘못 알고 있었던 걸까요? 해봤는데 헤헤

 

한 가지 문제를 발견했습니다. . . b 전 24시간은 b+24 입니다. . 막대는 현재 막대(0)에서 왼쪽으로 증가합니다.

dibsopen     = iOpen( "EURUSD" , 60 , b- 24 );   // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)

change to:

dibsopen     = iOpen( "EURUSD" , 60 , b+ 24 );   // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)

주석을 추가하는 것은 잘 했으며 에 들어가는 매우 좋은 연습입니다. . . :-)

 
RaptorUK :

한 가지 문제를 발견했습니다. . . b 전 24시간은 b+24 입니다. . 막대는 현재 막대(0)에서 왼쪽으로 증가합니다.

주석을 추가하는 것은 잘 했으며 에 들어가는 매우 좋은 연습입니다. . . :-)


와우, 그것을 알아내는 데 시간이 걸렸습니다. 내가 그 모든 것을 옳았다는 것이 믿기지 않습니다. 어리석은 실수입니다. 나는 지금 어딘가에 가고 있는 것 같은 느낌이 든다. 네, 제가 하고 있는 일을 추적하는 데 도움이 되고 여러분이 제가 하려고 하는 일을 매우 쉽게 볼 수 있도록 댓글을 추가했습니다. 이제 4 쌍을 비교하고 가장 높은 값을 가진 것을 뱉어내도록 하겠습니다. 어떻게 사용하는지 알려 드리겠습니다. RaptorUK님, 감사합니다.
 
좋은 일, 잘했습니다. 물론이죠 :-)
 
extern int      iOpenHour                = 6 ;

int start()
  {
                                                             //  Array Categorys ( 1  EURUSD, 2 GBPUSD, 3 USDCHF, 4 USDJPY )
int b[ 4 ], scannedhour[ 4 ];
datetime bartime[ 4 ];
double dibsclose[ 4 ], dibsopen[ 4 ], prevdayrange[ 4 ];

//----------------------------------------------------------------------------------------------
//        EURUSD PREV DAY RANGE CALC

for (b[ 1 ]= 0 ; b[ 1 ]<= 24 ; b[ 1 ]++)                               // scans the last 24 bars on eurusd
   {
      bartime[ 1 ] = iTime ( "EURUSD" , 60 , b[ 1 ]);               // checks the open time of each bar
      scannedhour[ 1 ] = TimeHour (bartime[ 1 ]);                 // extracts the hour of that bar
    
       if ( scannedhour[ 1 ] == iOpenHour )                     // Check to see if scanned hour = Dibs hour
         {
            dibsclose[ 1 ]    = iOpen ( "EURUSD" , 60 , b[ 1 ]);     // Get the open value of that bar (Close of 6gmt day) 
            dibsopen[ 1 ]     = iOpen ( "EURUSD" , 60 , b[ 1 ]+ 24 ); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[ 1 ] = (dibsclose[ 1 ]-dibsopen[ 1 ]);   // Calculate the range of the Dibs day
         }                                                   // End of if statement
    }                                                       // End of for statement
    

//----------------------------------------------------------------------------------------------
//        GBPUSD PREV DAY RANGE CALC

for (b[ 2 ]= 0 ; b[ 2 ]<= 24 ; b[ 2 ]++)                               // scans the last 24 bars on eurusd
   {
      bartime[ 2 ] = iTime ( "GBPUSD" , 60 , b[ 2 ]);               // checks the open time of each bar
      scannedhour[ 2 ] = TimeHour (bartime[ 2 ]);                 // extracts the hour of that bar
    
       if ( scannedhour[ 2 ] == iOpenHour )                     // Check to see if scanned hour = Dibs hour
         {
            dibsclose[ 2 ]    = iOpen ( "GBPUSD" , 60 , b[ 2 ]);     // Get the open value of that bar (Close of 6gmt day) 
            dibsopen[ 2 ]     = iOpen ( "GBPUSD" , 60 , b[ 2 ]+ 24 ); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[ 2 ] = (dibsclose[ 2 ]-dibsopen[ 2 ]);   // Calculate the range of the Dibs day
         }                                                   // End of if statement
    }                                                       // End of for statement



//----------------------------------------------------------------------------------------------
//        USDCHF PREV DAY RANGE CALC

for (b[ 3 ]= 0 ; b[ 3 ]<= 24 ; b[ 3 ]++)                               // scans the last 24 bars on eurusd
   {
      bartime[ 3 ] = iTime ( "EURUSD" , 60 , b[ 3 ]);               // checks the open time of each bar
      scannedhour[ 3 ] = TimeHour (bartime[ 3 ]);                 // extracts the hour of that bar
    
       if ( scannedhour[ 3 ] == iOpenHour )                     // Check to see if scanned hour = Dibs hour
         {
            dibsclose[ 3 ]    = iOpen ( "USDCHF" , 60 , b[ 3 ]);     // Get the open value of that bar (Close of 6gmt day) 
            dibsopen[ 3 ]     = iOpen ( "USDCHF" , 60 , b[ 3 ]+ 24 ); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[ 3 ] = (dibsclose[ 3 ]-dibsopen[ 3 ]);   // Calculate the range of the Dibs day
         }                                                   // End of if statement
    }                                                       // End of for statement


//----------------------------------------------------------------------------------------------
//        USDJPY PREV DAY RANGE CALC

for (b[ 4 ]= 0 ; b[ 4 ]<= 24 ; b[ 4 ]++)                               // scans the last 24 bars on eurusd
   {
      bartime[ 4 ] = iTime ( "USDJPY" , 60 , b[ 4 ]);               // checks the open time of each bar
      scannedhour[ 4 ] = TimeHour (bartime[ 4 ]);                 // extracts the hour of that bar
    
       if ( scannedhour[ 4 ] == iOpenHour )                     // Check to see if scanned hour = Dibs hour
         {
            dibsclose[ 4 ]    = iOpen ( "USDJPY" , 60 , b[ 4 ]);     // Get the open value of that bar (Close of 6gmt day) 
            dibsopen[ 4 ]     = iOpen ( "USDJPY" , 60 , b[ 4 ]+ 24 ); // Get the value of the bar 24 bars before the Dibs bar (Open of 6gmt day)
            prevdayrange[ 4 ] = (dibsclose[ 4 ]-dibsopen[ 4 ]);   // Calculate the range of the Dibs day
         }                                                   // End of if statement
    }                                                       // End of for statement




//----------------------------------------------------------------------------------------------



Comment ( "DIBS RANGE EURUSD:..." , prevdayrange[ 1 ],         //Display Ranges of each pair
         "DIBS RANGE GBPUSD:..." , prevdayrange[ 2 ],
         "DIBS RANGE USDCHF:..." , prevdayrange[ 3 ],
         "DIBS RANGE USDJPY:..." , prevdayrange[ 4 ]);      


   return ( 0 );
  }
자, 모든 변수를 배열로 바꾸고 각각에 대해 검사 를 실행했습니다. 이제 작동이 중지되었습니다. 이와 같이 for 루프를 여러 개 가질 수는 없나요?
 
dazamate :
자, 모든 변수를 배열로 바꾸고 각각에 대해 검사를 실행했습니다. 이제 작동이 중지되었습니다. 이와 같이 for 루프를 여러 개 가질 수는 없나요?
네, 할 수 있습니다. 문제는 없지만 for 루프 인덱스에 배열을 사용하지 마십시오. 원하는 경우 매번 b를 사용할 수 있습니다. 각 for 루프에 대해 0으로 재설정되므로 재사용은 문제가 되지 않습니다. 실제로 배열을 사용하는 데 필요한 것은 무엇입니까? 범위 값에만 해당되지 않습니까?
 
RaptorUK :
네, 할 수 있습니다. 문제는 없지만 for 루프 인덱스에 배열을 사용하지 마십시오. 원하는 경우 매번 b를 사용할 수 있습니다. 각 for 루프에 대해 0으로 재설정되므로 재사용은 문제가 되지 않습니다. 실제로 배열을 사용하는 데 필요한 것은 무엇입니까? 범위 값에만 해당되지 않습니까?
Ahhh 네, 말씀하신 내용을 알겠습니다. 수정하고 제가 어떻게 되는지 보겠습니다. 빠른 응답 남자 이 ea가 나를 부자로 만들면 $$$를 갚겠습니다.