回答編集履歴

6

修正

2022/03/10 02:54

投稿

yu-ima
yu-ima

スコア249

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 ); // BigBossの場合
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
- // true : summer time false : winter time
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; // 8なら日曜日が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

修正

2022/03/09 11:53

投稿

yu-ima
yu-ima

スコア249

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

修正

2022/03/09 11:51

投稿

yu-ima
yu-ima

スコア249

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 ); // double_array[][6]配列に物理的にコピー
20
+ nums = ArrayCopyRates( Array, "SPX.pro", PERIOD_H1 ); // BigBossの場合
21
21
 
22
22
  int yesterday, before_yesterday;
23
23
 

3

追加

2022/03/09 11:40

投稿

yu-ima
yu-ima

スコア249

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

追加

2022/03/09 11:37

投稿

yu-ima
yu-ima

スコア249

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

修正

2022/03/09 11:36

投稿

yu-ima
yu-ima

スコア249

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
-