//================================================================C // ボリンジャー・バンドによる株売買シミュレーション(複数パラメータ) // バンド幅を保有株数に応じて自動調整する // バンド幅が狭いと売り買いは容易になり、広いと困難になる // 保有株数が少ないと下半幅(買い)は狭く、上半幅(売り)は広くする // 保有株数が多いと下半幅(買い)は広く、上半幅(売り)は狭くする // Input File: T-xxxx.txt : プログラムと同じフォルダー // Output File: ABoll-xxxx.txt : プログラムと同じフォルダー // xxxxは4桁の株価コードで画面から与える //----------------------------------------------------------------C // javac ABollBand.java : classファイルの作成 // java ABollBand : 実行 // <画面から入力> // code : 株価コード // kabu : 一口単位の株数(1000, 100, 10 or 1) // <プログラム中で与える> // maxn = 5; 投資可能な最大口数 //----------------------------------------------------------------C // Written by Yasunori Ushiro (後 保範), 2011/11/23 //  訂正(kochi[]): 2012/01/08 // ( Waseda University, 早稲田大学 ) //================================================================C import java.io.*; import java.util.*; public class ABollBand //================================================================C // 呼値変換関数 //================================================================C { public static int valset(int x) { int kochi[] = { 3000,5000,30000,50000,300000,500000,3000000 }; int kizami[] = { 1, 5, 10, 50, 100, 500, 1000, 10000 }; int i, y, z; // set kizami for (i=0; i<7; i++) { if(x < kochi[i]) break; } z = kizami[i]; // set return value y = (x + z/2) / z; y = y * z; return y; } //================================================================C // 出力の桁揃え //================================================================C public static void fout(int val, int keta, PrintWriter q) { int i, n, x; n = 1; if (val < 0) n++; x = Math.abs(val) / 10; while (x != 0) { n++; x /= 10; } n = keta - n; for (i=0; i= stock[k][4]) //高値 >= μ+band*σ // 売り処理 { if(hoyu >= 1) //株を保有 { urikai[k][0] = -1; hoyu--; //1口売却 if(stock[k][0] >= stock[k][4]) { urikai[k][1] = stock[k][0]; } //始値売却 else { urikai[k][1] = stock[k][4]; } //指値売却 } } urikai[k][2] = hoyu; } // 最終日処理(保有株を終値で売却) k = n - 1; //最終日 urikai[k][0] = -hoyu; if (hoyu !=0 ) { urikai[k][1] = stock[n-1][3]; } else { urikai[k][1] = 0; } urikai[k][2] = 0; // 売買集計 Tkai = Turi = kosu = 0; for (k=ido; k 0) { kosu++; Tkai += urikai[k][1]; } else if (urikai[k][0] < 0) { Turi -= urikai[k][0]*urikai[k][1];;} } Tkai *= kabu; Turi *= kabu; rieki = Turi - Tkai; // 結果出力 // q.println(" "+ido+" "+kosu+" "+Tkai+" "+Turi // +" "+rieki); fout(ido, 4, q); //位置を合わせて出力 fout(kosu, 5, q); fout(Tkai, 10, q); fout(Turi, 10, q); fout(rieki, 9, q); q.println(); //改行 } } }