int start(){
staticdatetime Time0;
if (Time0 == Time[ 0 ]) return ; Time0 = Time[ 0 ];
// A new bar has started.
WHRoeder, 이 코드는 매우 간단해 보이지만 어떻게 작동하는지 머리로는 이해할 수 없습니다. time0이 time[0]과 같을 때마다 time0을 time[0]과 같게 하면 if 문은 항상 참이 되지 않을까요? 작동하지 않는다는 말은 아니지만 어떻게 작동하는지 이해하지 못합니다.
첫 번째 틱: Time0 은 Time[ 0 ] 과 같지 않으므로 반환이 실행되지 않고Time0 은 Time[ 0 ] (현재 막대의 시작 시간)으로 설정되어 나머지 시작 기능 이 실행됩니다.
두 번째 및 후속 틱: Time0 이 여전히 현재 막대의 시작 시간과 같으면 여전히 동일한 막대에 있고 return이 실행되고 시작 기능이 종료됩니다. Time0 이 현재 막대의 시작 시간과 같지 않으면 새 막대에 있고 반환이 실행되지 않고Time0 은 Time[ 0 ] (새 현재 막대의 시작 시간)으로 설정되어 시작 기능의 나머지 부분이 실행됩니다. .
보류 중인 주문이 있고 x 양의 막대로 트리거되지 않으면 취소되는 카운터를 만드는 방법은 무엇입니까? 내가 생각해낼 수 있는 것은 새 막대가 형성될 때마다 계산하는 카운터를 놓고 계산된 막대의 양 == 보류 중인 주문이 취소되기 전에 지정된 허용 막대를 계산하는 것입니다. 새로운 보류 주문이 열릴 때마다 바 카운터가 재설정됩니까? 어떻게 들리나요?
보류 중인 주문 을 확인하는 기능을 만들겠습니다. 각 주문이 언제 열렸는지 확인하고, 얼마나 오래 지속되었는지 확인하고, 시간 제한보다 길면 주문을 닫습니다.
1시간 tf에 eurusd, usdchf, gbpusd, usdjpy를 스캔하는 함수를 만들고 싶습니다. 마지막 06:00 gmt 양초로 돌아가서 시가를 기록하고 이전 06:00 gmt 양초 기록으로 돌아가서 각 쌍에 대해 6gmt -6gmt 범위를 기록합니다. 그런 다음 모든 쌍의 6gmt - 6gmt 범위를 비교하고 가장 높은 값을 반환합니다. ea가 1번 타임차트에 붙은걸로 가능한가요?
이와 같은 모든 문제는 코드에 대해 생각하기 전에 먼저 솔루션을 파악해야 합니다. . IMO. 순서도를 작성하거나 의사 코드를 작성하십시오. . . 먼저 의미가 있는 솔루션을 얻으십시오. . 그런 다음 코드를 보십시오.
마지막 질문에 답하자면 그렇습니다. 예를 들어 특정 양초의 미결 값을 다른 쌍에서 EA가 켜져 있는 값으로 가져오기 위해 제가 사용할 수 있습니다. . .
externint 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 barif ( 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 statementComment ( "Prev Dibs day range is..." ,prevdayrange, "dibsclose = " , dibsclose, "dibsopen = " ,dibsopen, "Scannedhour=" ,scannedhour);
return ( 0 );
}
좋아, 이것은 마지막 06:00 막대를 찾을 때까지 eurusd 1시간 차트를 스캔하고 열려 있는 것을 기록하고 다른 24 막대로 돌아가 해당 막대의 시작을 기록하는 코드를 작성하려는 내 자신의 시도입니다(06:00 시작일 ) 및 2개의 선택된 막대에서 열린 열린 범위를 가져옵니다.
한 가지 문제를 발견했습니다. . . 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)
한 가지 문제를 발견했습니다. . . b 전 24시간은 b+24 입니다. . 막대는 현재 막대(0)에서 왼쪽으로 증가합니다.
주석을 추가하는 것은 잘 했으며 에 들어가는 매우 좋은 연습입니다. . . :-)
와우, 그것을 알아내는 데 시간이 걸렸습니다. 내가 그 모든 것을 옳았다는 것이 믿기지 않습니다. 어리석은 실수입니다. 나는 지금 어딘가에 가고 있는 것 같은 느낌이 든다. 네, 제가 하고 있는 일을 추적하는 데 도움이 되고 여러분이 제가 하려고 하는 일을 매우 쉽게 볼 수 있도록 댓글을 추가했습니다. 이제 4 쌍을 비교하고 가장 높은 값을 가진 것을 뱉어내도록 하겠습니다. 어떻게 사용하는지 알려 드리겠습니다. RaptorUK님, 감사합니다.
externint 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 CALCfor (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 barif ( 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 CALCfor (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 barif ( 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 CALCfor (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 barif ( 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 CALCfor (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 barif ( 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가 나를 부자로 만들면 $$$를 갚겠습니다.
WHRoeder, 이 코드는 매우 간단해 보이지만 어떻게 작동하는지 머리로는 이해할 수 없습니다. time0이 time[0]과 같을 때마다 time0을 time[0]과 같게 하면 if 문은 항상 참이 되지 않을까요? 작동하지 않는다는 말은 아니지만 어떻게 작동하는지 이해하지 못합니다.
첫 번째 틱: Time0 은 Time[ 0 ] 과 같지 않으므로 반환이 실행되지 않고 Time0 은 Time[ 0 ] (현재 막대의 시작 시간)으로 설정되어 나머지 시작 기능 이 실행됩니다.
두 번째 및 후속 틱: Time0 이 여전히 현재 막대의 시작 시간과 같으면 여전히 동일한 막대에 있고 return이 실행되고 시작 기능이 종료됩니다. Time0 이 현재 막대의 시작 시간과 같지 않으면 새 막대에 있고 반환이 실행되지 않고 Time0 은 Time[ 0 ] (새 현재 막대의 시작 시간)으로 설정되어 시작 기능의 나머지 부분이 실행됩니다. .
보류 중인 주문이 있고 x 양의 막대로 트리거되지 않으면 취소되는 카운터를 만드는 방법은 무엇입니까? 내가 생각해낼 수 있는 것은 새 막대가 형성될 때마다 계산하는 카운터를 놓고 계산된 막대의 양 == 보류 중인 주문이 취소되기 전에 지정된 허용 막대를 계산하는 것입니다. 새로운 보류 주문이 열릴 때마다 바 카운터가 재설정됩니까? 어떻게 들리나요?
보류 중인 주문 을 확인하는 기능을 만들겠습니다. 각 주문이 언제 열렸는지 확인하고, 얼마나 오래 지속되었는지 확인하고, 시간 제한보다 길면 주문을 닫습니다.
1시간 tf에 eurusd, usdchf, gbpusd, usdjpy를 스캔하는 함수를 만들고 싶습니다. 마지막 06:00 gmt 양초로 돌아가서 시가를 기록하고 이전 06:00 gmt 양초 기록으로 돌아가서 각 쌍에 대해 6gmt -6gmt 범위를 기록합니다. 그런 다음 모든 쌍의 6gmt - 6gmt 범위를 비교하고 가장 높은 값을 반환합니다. ea가 1번 타임차트에 붙은걸로 가능한가요?
이와 같은 모든 문제는 코드에 대해 생각하기 전에 먼저 솔루션을 파악해야 합니다. . IMO. 순서도를 작성하거나 의사 코드를 작성하십시오. . . 먼저 의미가 있는 솔루션을 얻으십시오. . 그런 다음 코드를 보십시오.
마지막 질문에 답하자면 그렇습니다. 예를 들어 특정 양초의 미결 값을 다른 쌍에서 EA가 켜져 있는 값으로 가져오기 위해 제가 사용할 수 있습니다. . .
4 쌍의 분노에 대한 값을 얻으면 다음과 같이 가장 큰 값을 쉽게 결정할 수 있습니다.
. . . 또는 값을 배열에 넣고 ArraySort를 사용할 수 있습니다. . . 일반적으로 어떤 일을 하는 데는 한 가지 이상의 방법이 있습니다. 먼저 문제를 해결하는 방법에 대한 계획을 세워야 합니다.
편집: 이 항목 중 일부는 전략 테스터 에서 제대로 작동하지 않는다는 점을 명심하십시오.
좋아, 이것은 마지막 06:00 막대를 찾을 때까지 eurusd 1시간 차트를 스캔하고 열려 있는 것을 기록하고 다른 24 막대로 돌아가 해당 막대의 시작을 기록하는 코드를 작성하려는 내 자신의 시도입니다(06:00 시작일 ) 및 2개의 선택된 막대에서 열린 열린 범위를 가져옵니다.
놀랍게도 작동하지 않습니다. ㅋㅋ ------> http://myfacewhen.com/307/
내가 무슨 짓을 했는지 말해줘. 아니면 제가 이 문제에 대해 잘못 알고 있었던 걸까요? 해봤는데 헤헤
한 가지 문제를 발견했습니다. . . b 전 24시간은 b+24 입니다. . 막대는 현재 막대(0)에서 왼쪽으로 증가합니다.
주석을 추가하는 것은 잘 했으며 에 들어가는 매우 좋은 연습입니다. . . :-)
한 가지 문제를 발견했습니다. . . b 전 24시간은 b+24 입니다. . 막대는 현재 막대(0)에서 왼쪽으로 증가합니다.
주석을 추가하는 것은 잘 했으며 에 들어가는 매우 좋은 연습입니다. . . :-)
와우, 그것을 알아내는 데 시간이 걸렸습니다. 내가 그 모든 것을 옳았다는 것이 믿기지 않습니다. 어리석은 실수입니다. 나는 지금 어딘가에 가고 있는 것 같은 느낌이 든다. 네, 제가 하고 있는 일을 추적하는 데 도움이 되고 여러분이 제가 하려고 하는 일을 매우 쉽게 볼 수 있도록 댓글을 추가했습니다. 이제 4 쌍을 비교하고 가장 높은 값을 가진 것을 뱉어내도록 하겠습니다. 어떻게 사용하는지 알려 드리겠습니다. RaptorUK님, 감사합니다.
자, 모든 변수를 배열로 바꾸고 각각에 대해 검사를 실행했습니다. 이제 작동이 중지되었습니다. 이와 같이 for 루프를 여러 개 가질 수는 없나요?
네, 할 수 있습니다. 문제는 없지만 for 루프 인덱스에 배열을 사용하지 마십시오. 원하는 경우 매번 b를 사용할 수 있습니다. 각 for 루프에 대해 0으로 재설정되므로 재사용은 문제가 되지 않습니다. 실제로 배열을 사용하는 데 필요한 것은 무엇입니까? 범위 값에만 해당되지 않습니까?