回答編集履歴
6
修正
test
CHANGED
@@ -10,6 +10,8 @@
|
|
10
10
|
|
11
11
|
```ここに言語を入力
|
12
12
|
|
13
|
+
|
14
|
+
|
13
15
|
double Array[][6];
|
14
16
|
int nums;
|
15
17
|
|
@@ -17,8 +19,8 @@
|
|
17
19
|
void xxx()
|
18
20
|
{
|
19
21
|
int time = ( CheckSummerTime_US( TimeLocal() ) ) ? 14: 15; // サマータイムによるチェック
|
20
|
-
nums = ArrayCopyRates( Array, "SPX.pro", PERIOD_H1 ); //
|
22
|
+
nums = ArrayCopyRates( Array, "SPX.pro", PERIOD_H1 ); // double_array[][6]配列に物理的にコピー
|
21
|
-
|
23
|
+
|
22
24
|
int yesterday, before_yesterday;
|
23
25
|
|
24
26
|
if ( ! GetSP500( Array, nums, time, yesterday,before_yesterday ) )
|
@@ -28,8 +30,18 @@
|
|
28
30
|
else
|
29
31
|
{
|
30
32
|
Print ( "本日 : ", TimeLocal() );
|
31
|
-
Print ( "前日 : ", (datetime) Array[yesterday][0], " 終値: ", Array[yesterday][4] );
|
33
|
+
Print ( "前日 : ", (datetime) Array[ yesterday][0], " 終値: ", Array[ yesterday][4] );
|
32
|
-
Print ( "前々日 : ", (datetime) Array[before_yesterday][0], " 終値: ", Array[before_yesterday][4] );
|
34
|
+
Print ( "前々日 : ", (datetime) Array[before_yesterday][0], " 終値: ", Array[before_yesterday][4] );
|
35
|
+
|
36
|
+
double d = Array[yesterday][4] / Array[before_yesterday][4];
|
37
|
+
if ( d >= 1.005 )
|
38
|
+
{
|
39
|
+
// USD/JPY Buy
|
40
|
+
}
|
41
|
+
else if ( d <= 0.995 )
|
42
|
+
{
|
43
|
+
// USD/JPY Sell
|
44
|
+
}
|
33
45
|
}
|
34
46
|
|
35
47
|
}
|
@@ -48,34 +60,32 @@
|
|
48
60
|
// pos2 : 前々日ポインタ
|
49
61
|
bool GetSP500( double &ary[][6], int nums, int time, int &pos1, int &pos2 )
|
50
62
|
{
|
51
|
-
int p;
|
52
63
|
MqlDateTime dt;
|
53
64
|
int ed, bd;
|
54
65
|
int ep, bp;
|
55
|
-
|
56
66
|
|
57
67
|
pos1 = -1;
|
58
68
|
pos2 = -1;
|
59
69
|
|
60
|
-
// 前日を
|
70
|
+
// 最初の前日データを探す
|
61
71
|
for ( ep=0; ep < nums; ep++ )
|
62
72
|
{
|
63
73
|
TimeToStruct( ary[ep][0], dt );
|
64
|
-
if ( dt.day != Day() ) break;
|
74
|
+
if ( dt.day != Day() ) break; // 今日ではない
|
65
75
|
}
|
66
76
|
if ( ep >= nums ) return ( false ); // 前日が見つからない。
|
67
77
|
ed = dt.day; // 前日
|
68
78
|
|
69
|
-
// 前日の中で、指定時間のデータを
|
79
|
+
// 前日の中で、指定時間のデータを探す
|
70
|
-
for ( ; ep < nums; ep++ )
|
80
|
+
for ( ; ep < nums; ep++ )
|
71
81
|
{
|
72
82
|
TimeToStruct( ary[ep][0], dt );
|
73
|
-
if ( dt.day != ed ) return ( false ); // 指定時間のデータが無かった。
|
83
|
+
if ( dt.day != ed ) return ( false ); // 前日の指定時間のデータが無かった。
|
74
84
|
if ( dt.hour <= time ) break;
|
75
85
|
}
|
76
86
|
|
77
|
-
// 前々日を
|
87
|
+
// 最初の前々日データを探す
|
78
|
-
for ( bp=ep; bp < nums; bp++ )
|
88
|
+
for ( bp=ep; bp < nums; bp++ )
|
79
89
|
{
|
80
90
|
TimeToStruct( ary[bp][0], dt );
|
81
91
|
if ( dt.day != ed ) break;
|
@@ -83,25 +93,26 @@
|
|
83
93
|
if ( bp >= nums ) return ( false ); // 前々日が見つからない。
|
84
94
|
bd = dt.day; // 前々日
|
85
95
|
|
86
|
-
|
87
|
-
// 前々日の中で、指定時間のデータを
|
96
|
+
// 前々日の中で、指定時間のデータを探す
|
88
|
-
for ( ; bp < nums; bp++ )
|
97
|
+
for ( ; bp < nums; bp++ )
|
89
98
|
{
|
90
99
|
TimeToStruct( ary[bp][0], dt );
|
91
100
|
if ( dt.day != bd ) return ( false ); // 指定時間のデータが無かった。
|
92
101
|
if ( dt.hour <= time )
|
93
102
|
{
|
94
|
-
pos1 = ep;
|
103
|
+
pos1 = ep; // 前日の指定時間データポインタ
|
95
|
-
pos2 = bp;
|
104
|
+
pos2 = bp; // 前々日の指定時間データポインタ
|
96
105
|
return ( true ); // 前日、前々日のデータがあった。
|
97
106
|
}
|
98
107
|
}
|
99
|
-
return ( false );
|
108
|
+
return ( false ); // // 前々日の指定時間のデータが見つからない。
|
100
109
|
}
|
101
110
|
|
102
111
|
//+------------------------------------------------------------------+
|
112
|
+
// 米国におけるサマータイムチェック 注. 時差による補正、現地時間の考慮はしていない。
|
113
|
+
// dt : 日本時間 (TimeLocal)
|
103
|
-
//
|
114
|
+
// true : summer time
|
104
|
-
//
|
115
|
+
// false : winter time
|
105
116
|
bool CheckSummerTime_US( datetime dt )
|
106
117
|
{
|
107
118
|
MqlDateTime dts ;
|
@@ -119,7 +130,7 @@
|
|
119
130
|
dy = ( 8 - dts1.day_of_week );
|
120
131
|
if ( dy == 8 ) dy = 1; // 8なら日曜日が1日
|
121
132
|
dy += 7; // 3月 第2日曜日
|
122
|
-
return ( dts.day >= dy );
|
133
|
+
return ( dts.day >= dy ); // 夏時間?
|
123
134
|
}
|
124
135
|
else if ( dts.mon > 11 ) return ( false );
|
125
136
|
else if ( dts.mon < 11 ) return ( true );
|
@@ -130,8 +141,8 @@
|
|
130
141
|
dt = StructToTime( dts1 );
|
131
142
|
TimeToStruct( dt, dts1 ); // 11月1日の曜日を求める。
|
132
143
|
dy = ( 8 - dts1.day_of_week );
|
133
|
-
if ( dy == 8 ) dy = 1; //
|
144
|
+
if ( dy == 8 ) dy = 1; // 8なら日曜日が1日
|
134
|
-
return ( dts.day <= dy );
|
145
|
+
return ( dts.day <= dy ); // 夏時間?
|
135
146
|
}
|
136
147
|
}
|
137
148
|
/**/
|
5
修正
test
CHANGED
@@ -100,7 +100,7 @@
|
|
100
100
|
}
|
101
101
|
|
102
102
|
//+------------------------------------------------------------------+
|
103
|
-
//
|
103
|
+
// 米国におけるサマータイム チェック
|
104
104
|
// true : summer time false : winter time
|
105
105
|
bool CheckSummerTime_US( datetime dt )
|
106
106
|
{
|
4
修正
test
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
void xxx()
|
18
18
|
{
|
19
19
|
int time = ( CheckSummerTime_US( TimeLocal() ) ) ? 14: 15; // サマータイムによるチェック
|
20
|
-
nums = ArrayCopyRates( Array, "SPX.pro", PERIOD_H1 ); //
|
20
|
+
nums = ArrayCopyRates( Array, "SPX.pro", PERIOD_H1 ); // BigBossの場合
|
21
21
|
|
22
22
|
int yesterday, before_yesterday;
|
23
23
|
|
3
追加
test
CHANGED
@@ -6,6 +6,9 @@
|
|
6
6
|
終値の時間 15時, 14時のデータがなかった場合、その直前の時間を終値としています。
|
7
7
|
|
8
8
|
以上.
|
9
|
+
|
10
|
+
|
11
|
+
```ここに言語を入力
|
9
12
|
|
10
13
|
double Array[][6];
|
11
14
|
int nums;
|
@@ -34,3 +37,105 @@
|
|
34
37
|
|
35
38
|
|
36
39
|
|
40
|
+
|
41
|
+
|
42
|
+
//+------------------------------------------------------------------+
|
43
|
+
// S & P 500の前日、前々日のポインターを求め。
|
44
|
+
// ary[][6] : 1時間足データ
|
45
|
+
// nums : データ数
|
46
|
+
// time : 求める時間
|
47
|
+
// pos1 : 前日ポインタ
|
48
|
+
// pos2 : 前々日ポインタ
|
49
|
+
bool GetSP500( double &ary[][6], int nums, int time, int &pos1, int &pos2 )
|
50
|
+
{
|
51
|
+
int p;
|
52
|
+
MqlDateTime dt;
|
53
|
+
int ed, bd;
|
54
|
+
int ep, bp;
|
55
|
+
|
56
|
+
|
57
|
+
pos1 = -1;
|
58
|
+
pos2 = -1;
|
59
|
+
|
60
|
+
// 前日をチェック
|
61
|
+
for ( ep=0; ep < nums; ep++ )
|
62
|
+
{
|
63
|
+
TimeToStruct( ary[ep][0], dt );
|
64
|
+
if ( dt.day != Day() ) break;
|
65
|
+
}
|
66
|
+
if ( ep >= nums ) return ( false ); // 前日が見つからない。
|
67
|
+
ed = dt.day; // 前日
|
68
|
+
|
69
|
+
// 前日の中で、指定時間のデータを調べる
|
70
|
+
for ( ; ep < nums; ep++ )
|
71
|
+
{
|
72
|
+
TimeToStruct( ary[ep][0], dt );
|
73
|
+
if ( dt.day != ed ) return ( false ); // 指定時間のデータが無かった。
|
74
|
+
if ( dt.hour <= time ) break;
|
75
|
+
}
|
76
|
+
|
77
|
+
// 前々日をチェック
|
78
|
+
for ( bp=ep; bp < nums; bp++ )
|
79
|
+
{
|
80
|
+
TimeToStruct( ary[bp][0], dt );
|
81
|
+
if ( dt.day != ed ) break;
|
82
|
+
}
|
83
|
+
if ( bp >= nums ) return ( false ); // 前々日が見つからない。
|
84
|
+
bd = dt.day; // 前々日
|
85
|
+
|
86
|
+
|
87
|
+
// 前々日の中で、指定時間のデータを調べる
|
88
|
+
for ( ; bp < nums; bp++ )
|
89
|
+
{
|
90
|
+
TimeToStruct( ary[bp][0], dt );
|
91
|
+
if ( dt.day != bd ) return ( false ); // 指定時間のデータが無かった。
|
92
|
+
if ( dt.hour <= time )
|
93
|
+
{
|
94
|
+
pos1 = ep;
|
95
|
+
pos2 = bp;
|
96
|
+
return ( true ); // 前日、前々日のデータがあった。
|
97
|
+
}
|
98
|
+
}
|
99
|
+
return ( false );
|
100
|
+
}
|
101
|
+
|
102
|
+
//+------------------------------------------------------------------+
|
103
|
+
// アメリカにおけるサマータイム チェック
|
104
|
+
// true : summer time false : winter time
|
105
|
+
bool CheckSummerTime_US( datetime dt )
|
106
|
+
{
|
107
|
+
MqlDateTime dts ;
|
108
|
+
MqlDateTime dts1;
|
109
|
+
int dy;
|
110
|
+
|
111
|
+
TimeToStruct( dt, dts );
|
112
|
+
if ( dts.mon < 3 ) return ( false );
|
113
|
+
else if ( dts.mon == 3 ) // 3月
|
114
|
+
{
|
115
|
+
dts1 = dts;
|
116
|
+
dts1.day= 1;
|
117
|
+
dt = StructToTime( dts1 );
|
118
|
+
TimeToStruct( dt, dts1 ); // 3月1日の曜日を求める。
|
119
|
+
dy = ( 8 - dts1.day_of_week );
|
120
|
+
if ( dy == 8 ) dy = 1; // 8なら日曜日が1日
|
121
|
+
dy += 7; // 3月 第2日曜日
|
122
|
+
return ( dts.day >= dy );
|
123
|
+
}
|
124
|
+
else if ( dts.mon > 11 ) return ( false );
|
125
|
+
else if ( dts.mon < 11 ) return ( true );
|
126
|
+
else // 11月
|
127
|
+
{
|
128
|
+
dts1 = dts;
|
129
|
+
dts1.day= 1;
|
130
|
+
dt = StructToTime( dts1 );
|
131
|
+
TimeToStruct( dt, dts1 ); // 11月1日の曜日を求める。
|
132
|
+
dy = ( 8 - dts1.day_of_week );
|
133
|
+
if ( dy == 8 ) dy = 1; // 8なら日曜日が1日
|
134
|
+
return ( dts.day <= dy );
|
135
|
+
}
|
136
|
+
}
|
137
|
+
/**/
|
138
|
+
|
139
|
+
コード
|
140
|
+
```
|
141
|
+
|
2
追加
test
CHANGED
@@ -7,5 +7,30 @@
|
|
7
7
|
|
8
8
|
以上.
|
9
9
|
|
10
|
+
double Array[][6];
|
11
|
+
int nums;
|
10
12
|
|
11
13
|
|
14
|
+
void xxx()
|
15
|
+
{
|
16
|
+
int time = ( CheckSummerTime_US( TimeLocal() ) ) ? 14: 15; // サマータイムによるチェック
|
17
|
+
nums = ArrayCopyRates( Array, "SPX.pro", PERIOD_H1 ); // double_array[][6]配列に物理的にコピー
|
18
|
+
|
19
|
+
int yesterday, before_yesterday;
|
20
|
+
|
21
|
+
if ( ! GetSP500( Array, nums, time, yesterday,before_yesterday ) )
|
22
|
+
{
|
23
|
+
Print ( "前日か、前々日のデータが見つけられなかった。" );
|
24
|
+
}
|
25
|
+
else
|
26
|
+
{
|
27
|
+
Print ( "本日 : ", TimeLocal() );
|
28
|
+
Print ( "前日 : ", (datetime) Array[yesterday][0], " 終値: ", Array[yesterday][4] );
|
29
|
+
Print ( "前々日 : ", (datetime) Array[before_yesterday][0], " 終値: ", Array[before_yesterday][4] );
|
30
|
+
}
|
31
|
+
|
32
|
+
}
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
|
1
修正
test
CHANGED
@@ -7,128 +7,5 @@
|
|
7
7
|
|
8
8
|
以上.
|
9
9
|
|
10
|
-
double Array[][6];
|
11
|
-
int nums;
|
12
|
-
|
13
|
-
void xxx()
|
14
|
-
{
|
15
|
-
int time = ( CheckSummerTime_US( TimeLocal() ) ) ? 14: 15; // サマータイムによるチェック
|
16
|
-
nums = ArrayCopyRates( Array, "SPX.pro", PERIOD_H1 ); // double_array[][6]配列に物理的にコピー
|
17
|
-
|
18
|
-
int yesterday, before_yesterday;
|
19
|
-
|
20
|
-
if ( ! GetSP500( Array, nums, time, yesterday,before_yesterday ) )
|
21
|
-
{
|
22
|
-
Print ( "前日か、前々日のデータが見つけられなかった。" );
|
23
|
-
}
|
24
|
-
else
|
25
|
-
{
|
26
|
-
Print ( "本日 : ", TimeLocal() );
|
27
|
-
Print ( "前日 : ", (datetime) Array[yesterday][0], " 終値: ", Array[yesterday][4] );
|
28
|
-
Print ( "前々日 : ", (datetime) Array[before_yesterday][0], " 終値: ", Array[before_yesterday][4] );
|
29
|
-
}
|
30
|
-
|
31
|
-
}
|
32
10
|
|
33
11
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
//+------------------------------------------------------------------+
|
39
|
-
// S & P 500の前日、前々日のポインターを求め。
|
40
|
-
// ary[][6] : 1時間足データ
|
41
|
-
// nums : データ数
|
42
|
-
// time : 求める時間
|
43
|
-
// pos1 : 前日ポインタ
|
44
|
-
// pos2 : 前々日ポインタ
|
45
|
-
bool GetSP500( double &ary[][6], int nums, int time, int &pos1, int &pos2 )
|
46
|
-
{
|
47
|
-
int p;
|
48
|
-
MqlDateTime dt;
|
49
|
-
int ed, bd;
|
50
|
-
int ep, bp;
|
51
|
-
|
52
|
-
|
53
|
-
pos1 = -1;
|
54
|
-
pos2 = -1;
|
55
|
-
|
56
|
-
// 前日をチェック
|
57
|
-
for ( ep=0; ep < nums; ep++ )
|
58
|
-
{
|
59
|
-
TimeToStruct( ary[ep][0], dt );
|
60
|
-
if ( dt.day != Day() ) break;
|
61
|
-
}
|
62
|
-
if ( ep >= nums ) return ( false ); // 前日が見つからない。
|
63
|
-
ed = dt.day; // 前日
|
64
|
-
|
65
|
-
// 前日の中で、指定時間のデータを調べる
|
66
|
-
for ( ; ep < nums; ep++ )
|
67
|
-
{
|
68
|
-
TimeToStruct( ary[ep][0], dt );
|
69
|
-
if ( dt.day != ed ) return ( false ); // 指定時間のデータが無かった。
|
70
|
-
if ( dt.hour <= time ) break;
|
71
|
-
}
|
72
|
-
|
73
|
-
// 前々日をチェック
|
74
|
-
for ( bp=ep; bp < nums; bp++ )
|
75
|
-
{
|
76
|
-
TimeToStruct( ary[bp][0], dt );
|
77
|
-
if ( dt.day != ed ) break;
|
78
|
-
}
|
79
|
-
if ( bp >= nums ) return ( false ); // 前々日が見つからない。
|
80
|
-
bd = dt.day; // 前々日
|
81
|
-
|
82
|
-
|
83
|
-
// 前々日の中で、指定時間のデータを調べる
|
84
|
-
for ( ; bp < nums; bp++ )
|
85
|
-
{
|
86
|
-
TimeToStruct( ary[bp][0], dt );
|
87
|
-
if ( dt.day != bd ) return ( false ); // 指定時間のデータが無かった。
|
88
|
-
if ( dt.hour <= time )
|
89
|
-
{
|
90
|
-
pos1 = ep;
|
91
|
-
pos2 = bp;
|
92
|
-
return ( true ); // 前日、前々日のデータがあった。
|
93
|
-
}
|
94
|
-
}
|
95
|
-
return ( false );
|
96
|
-
}
|
97
|
-
|
98
|
-
//+------------------------------------------------------------------+
|
99
|
-
// アメリカにおけるサマータイム チェック
|
100
|
-
// true : summer time false : winter time
|
101
|
-
bool CheckSummerTime_US( datetime dt )
|
102
|
-
{
|
103
|
-
MqlDateTime dts ;
|
104
|
-
MqlDateTime dts1;
|
105
|
-
int dy;
|
106
|
-
|
107
|
-
TimeToStruct( dt, dts );
|
108
|
-
if ( dts.mon < 3 ) return ( false );
|
109
|
-
else if ( dts.mon == 3 ) // 3月
|
110
|
-
{
|
111
|
-
dts1 = dts;
|
112
|
-
dts1.day= 1;
|
113
|
-
dt = StructToTime( dts1 );
|
114
|
-
TimeToStruct( dt, dts1 ); // 3月1日の曜日を求める。
|
115
|
-
dy = ( 8 - dts1.day_of_week );
|
116
|
-
if ( dy == 8 ) dy = 1; // 8なら日曜日が1日
|
117
|
-
dy += 7; // 3月 第2日曜日
|
118
|
-
return ( dts.day >= dy );
|
119
|
-
}
|
120
|
-
else if ( dts.mon > 11 ) return ( false );
|
121
|
-
else if ( dts.mon < 11 ) return ( true );
|
122
|
-
else // 11月
|
123
|
-
{
|
124
|
-
dts1 = dts;
|
125
|
-
dts1.day= 1;
|
126
|
-
dt = StructToTime( dts1 );
|
127
|
-
TimeToStruct( dt, dts1 ); // 11月1日の曜日を求める。
|
128
|
-
dy = ( 8 - dts1.day_of_week );
|
129
|
-
if ( dy == 8 ) dy = 1; // 8なら日曜日が1日
|
130
|
-
return ( dts.day <= dy );
|
131
|
-
}
|
132
|
-
}
|
133
|
-
/**/
|
134
|
-
|