So-net無料ブログ作成
検索選択

日足のレーダースクリーンに週足転換線と基準線を表示 [Indicator]

足種が日足のレーダースクリーンに週足の一目転換線と基準線の解離を表示してみました。スクリーンショット 2017-01-28 16.33.56.png
2017/2/6 修正と追加(改悪?)


レーダースクリーンは足種を変更することで、日足や週足の移動平均線あるいは一目均衡表を表示することが可能です。

しかし、同じページに日足と週足の分析テクニックを同時に表示するには自作インジケータが必要と思われます。

今回は、日足の移動平均乖離を表示しているレーダースクリーンに週足の転換線と基準線と乖離率を表示するインジケーターを作成してみました。

使い方
(1)インジケーター(チャート+レーダースクリーン)を新規作成して、コードをコピーして検証。
(2)レーダースクリーンの(複数)行を選択して、メニューから「設定」「銘柄コード」「選択中の銘柄コード」とクリックして、足種を「日足」に変更します。
(3)分析テクニックを挿入して、「設定」からスタイルのプロパティを数値とパーセントに設定。
注:26週分のデータがない銘柄はエラーが出ます。
*(2)’ 日足チャートに挿入してサブグラフに表示される場合は、スケーリングを「元データに軸を合わせる」を選択してください。
スクリーンショット 2017-01-28 18.15.14.png

using elsystem;

vars: int counter(0), double max(0), double min(0);

If BarType = 2 then	//日足限定  分足で使いたいとき Or BarType = 1 としてさらに足の本数を増やさなければなりません
Begin
	Switch(GetAppInfo(aiApplicationType))
	Begin
	Case cChart:
		max = HighW(0);
		min= LowW(0);
		For counter = 1 to 25
		Begin
			//print(counter, " ", CloseW(counter));
			If HighW(counter) < 0 or LowW(counter) < 0 then break;
			If HighW(counter) > max then max = HighW(counter);
			If LowW(counter) < min then min = LowW(counter);
			If counter = 8 then Plot1((max + min) / 2, "転換");
			If counter = 25 then Plot4((max + min) / 2, "基準");
		End;
	
	Case cRadarScreen:		//レーダースクリーンではCloseWは使えない様だ
		Vars: DateTime dd(null)
			, int countW(0), double kijun(0), double tenkan(0), double h26(0), double l26(0), double chikou(0);
		//w = DayOfWeek(Date);
		dd = DateTime.Create(Date) - TimeSpan.Create(DayOfWeek(Date), 0, 0, 0);
		max = High;
		min = Low;
		//print(dd.ToString());
		Plot1(Close[3], "転換");
		Repeat
			counter += 1;
			If Close[counter] <= 0 then break;
			If High[counter] > max then max = High[counter];
			If Low[counter] < min then min = Low[counter];
			If Date[counter] < dd.ElDate then
			Begin
				dd.AddDays(-7);
				countW += 1;
				Switch(countW)
				Begin
				Case 9:
					tenkan = (max + min) / 2;
					Plot1(tenkan, "転換");
					Plot2(Close - tenkan, "位置");
					Plot3(Close / tenkan - 1, "%", Default, GetBackgroundColor);
					If Close - tenkan > 0 then setplotcolor(2, red) else setplotcolor(2, Green);
					setplotbgcolor(2, GetBackgroundColor);
				Case 25:
					If h26 = 0 then
					Begin
						chikou = Close[counter];
						h26 = High[counter];
						l26 = Low[Counter];
					End
					Else
					Begin
						If High[counter] > h26 then h26 = High[counter];
						If Low[counter] < l26 then l26 = Low[counter];
					End;
					
				Case 26:
					kijun = (max + min) / 2;
					Plot4(kijun, "基準");
					Plot5(Close - kijun, "位置");
					Plot6(Close / kijun - 1, "%", Default, GetBackgroundColor);
					If Close - kijun > 0 then setplotcolor(5, red) else setplotcolor(5, Green);
					setplotbgcolor(5, GetBackgroundColor);
					If Close >= h26 then
					Begin
						Plot7(Close - h26, "遅行", Red, GetBackgroundColor);
						Plot8(Close / h26 - 1, "%", Default, GetBackgroundColor);
					End
					Else if Close <= l26 then
					Begin
						Plot7(Close - l26, "遅行", Green, GetBackgroundColor);
						Plot8(Close / l26 - 1, "%", Default, GetBackgroundColor);
					End
					Else
						Plot7(0, "遅行", Default, GetBackgroundColor);
					
					//If Close - CloseW(25) > 0 then setplotcolor(5, red) else setplotcolor(5, Green);
					//setplotbgcolor(5, GetBackgroundColor);
				End;
				//print(countW, " ", Date[counter], " max:", max, " min:", min, " avg:", (max + min) / 2);
			End;
		Until (countW > 26 Or counter > 1000);
	End;
End;

遅行線の数値は、最終遅行線の同日高値あるいは安値との乖離(率)です。
遅行線が、高値と安値の間にある場合は「0」と表示されます。

アウトプットに警告が出ますが(チャート表示用のHighWなどのシリーズ関数)チャート表示もできるようです。
スクリーンショット 2017-01-28 18.42.45.png

逆にレーダースクリーンの足種を「週足」にする方法もあるかもしれませんが、日足のデータ取得方法が思いつきませんでした。


株取引を始めた頃に、「投資の王道」の著者である新井邦宏さんのセミナーだったと思うのですが、「週足転換線を株価が上抜けている間だけホールドすれば良い」というようなことを何度か聞いた記憶があります。

スイングトレードで難しいのは、利食いと損切りを含めたExitだと思っています。
急上昇した銘柄などでは、週足転換線までExitを我慢するのはさすがに引っ張りすぎで精神的にきついと思いますが、最大ここまでで諦めるという使い方の参考になるかも。



2017/2/6 修正と追加
分足で日足の一目という質問がありましたので、コードを変更しました。

修正をする過程で、前回のコードのミスに気がつきました。
レーダースクリーンの場合に、Caseで9日26日と分岐してPlotしていますが、caseの前にmaxとminの判定と代入をしていました。
こうしてしまうと、前週(前日)の最終データが高値あるいは安値であった場合これを代入して転換線等の値が間違っている場合があるため、この判定と代入をcaseの後ろに持ってきました。

Inputで"w"または"d"を指定することで、週足と日足の転換線と基準線を変更できるようにしました。
レーダースクリーンで変更した場合には、更新が必要です。

チャートの場合で転換線と基準線が表示できない場合は「銘柄コードの設定」からデータ範囲を大きく取る必要があります(IPO等でデータ本数が少ない場合は当然計算できずにEが出ると思います)。

短い分足のレーダースクリーンのデータ表示には適してるとは言えませんが、長期間データの取得方法が分かる人がいれば参考にしてみてください。

ザラ場では分足でレーダースクリンの表示が消えることもありましたが、原因不明です。

データ取得に時間がかかり使い物になるとは言えないような気もします。


using elsystem;

vars: int counter(0), double max(0), double min(0), bool isNotext(true);
inputs: string ashi("w");	//w:週足 d:日足

If ashi = "d" or ashi = "w" then
Begin
	If GetAppInfo(aiApplicationType) = cChart then	// チャート
	Begin
		Switch(ashi)
		Begin
		Case "d":
			max = HighD(0);
			min= LowD(0);
			For counter = 1 to 25
			Begin
				If HighD(counter) < 0 or LowD(counter) < 0 then break;
				If HighD(counter) > max then max = HighD(counter);
				If LowD(counter) < min then min = LowD(counter);
				If counter = 8 then Plot1((max + min) / 2, "転換");
				If counter = 25 then Plot4((max + min) / 2, "基準");
			End;
			If LastBarOnChart then
			Begin
				If Plot1 > 0 and isNotext then
					value7 = Text_New(Date, Time, Plot1, "日転");
				If Plot4 > 0 and isNotext then
					value7 = Text_New(Date, Time, Plot4, "日基");
				IsNoText = false;
			end;
		Case "w":
			max = HighW(0);
			min= LowW(0);
			For counter = 1 to 25
			Begin
				If HighW(counter) < 0 or LowW(counter) < 0 then break;
				If HighW(counter) > max then max = HighW(counter);
				If LowW(counter) < min then min = LowW(counter);
				If counter = 8 then Plot1((max + min) / 2, "転換");
				If counter = 25 then Plot4((max + min) / 2, "基準");
			End;
			If LastBarOnChart then
			Begin
				If Plot1 > 0 and isNotext then
					value7 = Text_New(Date, Time, Plot1, "週転");
				If Plot4 > 0 and isNotext then
					value7 = Text_New(Date, Time, Plot4, "週基");
				IsNoText = false;
			end;
		End;
	End
	Else if GetAppInfo(aiApplicationType) = cRadarScreen then
	Begin
		Vars: DateTime dd(null), int eld(0), int countBar(0)
			, double kijun(0), double tenkan(0), double h26(0), double l26(0), double chikou(0);
		If ashi = "d" then eld = Date Else
			dd = DateTime.Create(Date) - TimeSpan.Create(DayOfWeek(Date), 0, 0, 0);
		max = High;
		min = Low;
		Repeat
			counter += 1;
			If Close[counter] <= 0 then break;
			If ashi = "w" then eld = dd.ELDate;
			If Date[counter] < eld then
			Begin
				countBar += 1;
				//If symbol.substring(0,4) = "7717" then
				//print(countBar, " ", Date[counter], " max:", max, " min:", min, " avg:", (max + min) / 2);
				If ashi = "d" then eld = Date[counter] else dd.AddDays(-7);
				Switch(countBar)
				Begin
				Case 9:
					tenkan = (max + min) / 2;
					Plot1(tenkan, "転換");
					Plot2(Close - tenkan, "位置");
					Plot3(Close / tenkan - 1, "%", Default, GetBackgroundColor);
					If Close - tenkan > 0 then setplotcolor(2, red) else setplotcolor(2, Green);
					setplotbgcolor(2, GetBackgroundColor);
				Case 25:
					If h26 = 0 then
					Begin
						chikou = Close[counter];
						h26 = High[counter];
						l26 = Low[Counter];
					End
					Else
					Begin
						If High[counter] > h26 then h26 = High[counter];
						If Low[counter] < l26 then l26 = Low[counter];
					End;
					
				Case 26:
					kijun = (max + min) / 2;
					Plot4(kijun, "基準");
					Plot5(Close - kijun, "位置");
					Plot6(Close / kijun - 1, "%", Default, GetBackgroundColor);
					If Close - kijun > 0 then setplotcolor(5, red) else setplotcolor(5, Green);
					setplotbgcolor(5, GetBackgroundColor);
					If Close >= h26 then
					Begin
						Plot7(Close - h26, "遅行", Red, GetBackgroundColor);
						Plot8(Close / h26 - 1, "%", Default, GetBackgroundColor);
					End
					Else if Close <= l26 then
					Begin
						Plot7(Close - l26, "遅行", Green, GetBackgroundColor);
						Plot8(Close / l26 - 1, "%", Default, GetBackgroundColor);
					End
					Else
						Plot7(0, "遅行", Default, GetBackgroundColor);
					
				End;
			End;
			If High[counter] > max then max = High[counter];
			If Low[counter] < min then min = Low[counter];
		Until (countBar >= 26);
	End;

End;


nice!(0)  コメント(8)  トラックバック(0) 
共通テーマ:

nice! 0

コメント 8

坂本です

nari様
大変お世話になっております
今回の週足転換線と基準線早速入力しました。ありがとうございます
転換線と基準線の位置が乖離率で表示されること、チャート表示も転換線と基準線を参考にしてたので見やすくていいと思いました。そこで5分足に日足の転換線基準線の表示が出来たらデイトレの参考になるのではないかと思いました。
そこで今回のプログラムを参考に日足のデーターで作りたいと思いまして、単語をヘルプと照らし合わせたりしたのですが週足と日足の変換の仕方がどーしても分かりませんでした。出来ましたらなんですがヒントいただけませんでしょうか。
よろしくおねがします
by 坂本です (2017-02-05 15:40) 

nari

こんにちは坂本さん

5行目をBarType = 1に、
HighWをHighD、LowWをLowDに変更すればできるような気がします。
確かめていないので間違っていればごめんなさい。
by nari (2017-02-06 08:11) 

坂本です

早速変更してみたのですがエラーで動きませんでした。後もう一つありまして
日足のチャートに週足の転換線基準線表示されてるのですが、レーダースクリーンに挿入しました週足の一目均衡表が動かないです
申し訳ないですが修正点教えていただけますとありがたいです
よろしくお願いします
by 坂本です (2017-02-06 10:56) 

坂本

今見ましたらレーダースクリーン起動してました
申し訳ありませんでした
再起動したのがよかったのかもしれません
失礼しました
by 坂本 (2017-02-06 13:59) 

nari

こちらで試したところ、HighD、LowDに変更して、Sonyの60分足と5分足のチャートには表示できました。エラーダイアログは出ませんでした。
ただし、5分足の場合追加データのダウンロードが必要と思います。
チャートを表示して、メインメニューの「設定」「銘柄コードの設定」タブの範囲を「26日前」で転換線と基準線が表示できました。

5分足のレーダースクリーンはこれでは無理です。
23行目を「Vars: int eld(0) // << DateTime dd(null)」
26行目を「eld = Date; // << dd = DateTime.Create(Date) - TimeSpan.Create(DayOfWeek(Date), 0, 0, 0);」
31行目コメントアウト「//Plot1(Close[3], "転換");」
37行目「 If Date[counter] < eld then // << If Date[counter] < dd.ElDate then

39行目「eld = Date[counter]; // << dd.AddDays(-7);」
こう変更すると、60分足など長い分足のレーダースクリーンでは表示できると思いますが、5分足ではうまく表示できないかもしれません。
追加ダウンロードできれば表示できそうな気もしますが、レーダースクリーンの場合よくわかりませんでした。
by nari (2017-02-06 14:34) 

坂本です

分足の表示を60分に切り替えました
チャートがすっきりして大変見やすくなりました。
レーダースクリーン二も入れてみました。
テーマ別に仕分けしたポートフォリオがあったのですが、動かなくなったので電源ボタンから強制シャットダウンしたところポートフォリオが消えてしまいました。仕訳してないほうは大丈夫でした。
それはともかくとして何年も前からほしいアイテムだったので感謝極まりです。
ありがとうございました

by 坂本です (2017-02-07 13:30) 

Mc.N

レーダースクリーンでOpen?()関数を使う場合、プロパティ→一般にある『累積計算のための追加データをロード』を有効にしてロードする追加バーを多めに設定するとエラーが減るようです。例えば5分足の設定で日足(OpenD)を作る場合、300本くらいに設定すると1日分の足は確保できる感じでした。

とはいえ数値を大きくしすぎると動作が急激に遅くなるようで、使い方が難しいです。

トンチンカンなことを言ってたら申し訳ない。
by Mc.N (2017-02-13 19:46) 

nari

Mc.Nさん コメントありがとうございます。

インジケーターのプロパティで本数が設定できたのですね。
チャートと同じように、銘柄のプロパティで設定できるものだと思い込んでいました。ありがとうございました。

レーダースクリーンで銘柄数も多いと本数を増やさなくとも表示に時間がかかり、このインジケーター自体実用的とは言い難いと最近思っています。

また、CloseD関数などはシリーズ関数という特殊の関数で、条件分岐で分けても計算を行う仕様のようです(時間とメモリを余計に消費)。
このインジケーターはチャートではHighD等を使用し、レーダースクリーンではHighDで結果を取得できないため、1本づつ過去に遡り計算しています。両方を一つにしているのも無理があるのかもしれません(チャートは1銘柄なのでシリーズ関数利用しても極端な時間にはならないような気がします。)。

自分の環境では、レーダースクリーンとチャートで分離したインジケーター(ifブロックで分けたファイル)で使っています(遅いのはあまり変化ないようですが)。
by nari (2017-02-14 07:45) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この記事のトラックバックURL:

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。