SoftHompoのホーム>SellBuySimのホーム>SellBuySimのマニュアル
先頭へ

SellBuySimのマニュアル

はじめに
知識表現
画面構成
知識のサンプル
制限事項
著作権

はじめに

SellBuySimは、株式売買シミュレーションプログラムです。
複数の株価指標の判定基準を組み合わせることにより、株式の売買条件を記述することができます。
複数の売買条件を設定することができ、それぞれの売買条件毎に売買株数を設定することができます。
株式売買時の経費及び消費税も考慮した売買時の利益を算出します。
シミュレーション期間を設定することができます。一つの銘柄について、期間ごとに判定指標のパラメータを最適化することができます。
シミュレーション結果は、チャート上にも表示され、また、表形式でも表示されます。チャートと出力画面は連動して表示されます。チャート上のマウス位置に相当する売買が自動的に選択され、どの判定条件がヒットしたかがわかります。
複数の銘柄に対して、同じ売買条件を適用して、その結果を利益額の多い順に表示することができます。これにより、どの銘柄を売買対象にすればよいかが判断できます。

知識表現

株式の売買条件は、知識として表現されます。

知識の文法

一つの知識は複数の知識レコードから構成されます。知識レコードとは、株価データが指定した条件に合致したときに操作を実行する単位です。

知識レコードは、
条件部→操作部
の構造をしています。

知識レコードのどの位置にもコメントを挿入することができます。
コメントは、
/*コメント文字列*/
のように/**/で挟みます。

知識レコードでは大文字と小文字は区別しません。
知識レコード内のスペースは無視されます。

条件部

条件部は、株価データの状態を調べて設定した条件に一致しているかを判定する知識です。
条件部の結果は、ブール値です。0か1のどちらかの値を返します。結果が0の場合は、条件がヒットしなかったときです。結果が1の場合は、条件がヒットしたので操作部に記述されている処理を実行します。

演算子

使用可能な演算子について述べます。

丸括弧 算術演算子の優先順位を制御するときに丸括弧を使用します。
例 a+b*c-dは、(a+b)*(c-d)と解釈します。aにb*cを足してdを引くようにしたいときは、
a+(b*c)-dと記述します。
論理演算子
&& 二つの比較条件の積をとります。
例 a>b && a>c の場合は、aがbとcよりも大きいときにヒットします。
|| 二つの比較条件の論理和をとります。
例 a>b || a>c の場合は、aがbよりも大きいか、cよりも大きいときにヒットします。
比較演算子
> 例 a>b aがbより大きいときヒットします。
>= 例 a>=b aがbより大きいか等しいときヒットします。
< 例 a<b aがbより小さいときヒットします。
<= 例 a<=b aがbより小さいか等しいときヒットします。
算術演算子
* 掛け算。
/ 割り算。
+ 足し算。
- 引き算。

変数

BuyPrice 対象にしている買い持ちしている株式の買い値です。
買い値からの下落率を求めるときに使用します。
例 (BuyPrice * 0.9 >= stock[0].Close 当日の終値が買い値の9割より下がっているかを判断します。
常数 任意の数値です。
例 BuyPrice * 0.9 買い値の9割の値を計算します。

株価指標

使用可能な株価指標について述べます。
各指標のパラメータについては、SMSのマニュアルを参照してください。

指標は、知識の先頭で、以下の形式で宣言してください。
(変数名)=>(指標名)(パラメータ)

指標の使用は、

(変数名)[(日付インデックス)].(変数名)

の形式で参照します。
日付インデックスは、0が当日であり、-1は昨日になります。
たとえば、
MACD[0].MACD<0
は、MACD指標の当日のMACD変数の値が負である以下を判定していることになります。
シミュレータは、シミュレータ期間について、知識を適応してゆくのでシミュレーション期間全部について、MACDの値が負であるかを判定することになります。


この例では、MACDとSTOCKの指標が使用されています。
買いの知識レコードの意味は、
当日のMACDの値が0以下で、かつ、前日のMACDのヒストグラムは負であり、前日のMACD のヒストグラムもMACDもシグナルも当日の値よりも小さい場合、6倍の単位株の株式を購入せよといこととです。

macd=>macd(12,26,9);
stock=>stock();

買い
{
macd[0].macd <= 0
&& macd[-1].histogram<0
&& macd[-1].histogram < macd[0].histogram
&& macd[-1].macd < macd[0].macd
&& macd[-1].signal < macd[0].signal

buy[6]
}

売り
{
macd[0].macd > 0
&& macd[-1].histogram>0
&& macd[-1].histogram > macd[0].histogram
&& macd[-1].macd > macd[0].macd
&& macd[-1].signal > macd[0].signal
&& buyprice * 1. < stock[0].close

sell[4]
}

【注意】
指標に変数がVALUEしかない場合は、参照する場合変数名は不要です。
以下の例では、SMA、SLOPEは変数がVALUEしかないので、参照部分で、変数が指定されていません。

ave1=>sma(25);
ave2=>sma(75);
slope1=>slope(25);
slope2=>slope(75);

cross=:(ave1[-1] - ave2[-1]) * (ave1[0] - ave2[0]) < 0 ;

ゴールデンクロス{
cross &&
/*どちらも上昇傾向*/
ave1[0] > ave2[0] &&
slope1[0] > 0 && slope2[0] > 0
→Display
}
名前 指標名 変数名
BB Bollinger Bands CENTER:中心値
UPPER:上限値
LOWER:下限値
BB%B Bollinger Band %B
VALUE:指標値
EMA exponential moving average VALUE:指標値
SMA simple moving average VALUE:指標値
MACD MACD MACD:MACD
SIGNAL:シグナル値
HISTOGRAM:ヒストグラム
RSI Relative Strength Index VALUE:指標値
SLOPE Slope VALUE:指標値
FASTSTO Fast STO K:%K
D:%D
SLOWSTO Slow STO K:%K
D:%D
FULLSTO Full STO K:%K
D:%D
STOCK 株価 OPEN:始値
HIGH:高値
LOW:安値
CLOSE:終値
EXCHANGE:出来高
PS Psychological line VALUE:指標値
ZZ ZigZag VALUE:指標値
GRADIENT:傾き
RD 乖離率 VALUE:指標値
 ICHIMOKU 一目均衡  TENKAN:転換線
KIJYUN:基準線
SENKOU1:先行スパン1
SENKOU2:先行スパン2
CHIKOU:遅行スパン

ローカル変数

条件文をローカル変数として宣言し、知識レコードの中で使用することができます。

(変数名)=:[条件文]

【例】

以下の例では、crossがローカル変数です。

ave1=>sma(25);
ave2=>sma(75);
slope1=>slope(25);
slope2=>slope(75);

cross=:(ave1[-1] - ave2[-1]) * (ave1[0] - ave2[0]) < 0 ;

ゴールデンクロス{
cross &&
/*どちらも上昇傾向*/
ave1[0] > ave2[0] &&
slope1[0] > 0 && slope2[0] > 0
→Display
}

操作部

条件部がヒットしたときに実施する処理内容です。

Buy[unit] 当日の終値でunit単位の株式を購入します。
unit単位は、売買単位株数の数です。
例 Buy[1] 売買単位株数が1000であれば、当日の終値で1000株購入します。
Sell[unit] 当日の終値でunit単位の株式を売却します。
Display ヒットしたときの知識レコード名を表示します。

画面構成

SellBuySimで表示する画面の機能について説明します。

メイン画面

以下にメイン画面を表示します。

図 メイン画面
メニュー サブメニュー 内容
ファイル DBフォルダの設定 データベースフォルダを設定します。
SMS本体が稼働していれば、ここで設定する必要はありません。
株式分割の設定 株式分割の設定をします。
SMSで設定していれば、ここでは設定する必要はありません。
表示 チャート画面 株価チャート画面を表示します。
シミュレーション結果画面 シミュレーション結果画面を表示します。
アラーム画面 アラーム画面を表示します。
財務情報 財務情報を表示します。
マウス位置データ表示画面 チャート画面のマウス位置での株価、指標、資産状況を表示します。
市場選択 市場は最初に優先市場を表示します。
他の市場の株価で、シミュレーションを実行する時に選択します。
業種選択 業種を選択します。
銘柄選択 銘柄を選択します。
操作 前の企業 現在の業種に分類されている前の銘柄を表示します。
次の企業 現在の業種に分類されている次の銘柄を表示します。
ヘルプ マニュアル 本マニュアルを表示します。
バージョン プログラムバージョンを表示します。

KnowledgeWnd

知識画面は常時表示されています。
知識の作成・編集、そして、シミュレーションの実行を行います。

メニュー サブメニュー 内容
編集 知識の追加 新規に知識を追加します。
知識名変更 現在表示している知識の名称を変更します。
知識削除 現在表示している知識を削除します。
知識選択 登録されている知識を選択します。
コンパイル 現在表示している知識をコンパイルします。
正常終了した場合は、自動的にデータベースに登録されます。
保存 コンパイルが正常に終了していなくても、とりあえずデータベースに登録します。
単一銘柄開始 現在の知識を現在の銘柄についてシミュレーションを開始します。
株価は、現在選択されている市場のものを使用します。
知識が正常にコンパイルできていない場合、シミュレーションは実行できません。
全銘柄開始 現在の業種に分類されている全銘柄についてシミュレーションを実行します。
この場合、株価は各銘柄の優先市場のものを使用します。
初期投資金額 初期投資金額を設定します。
シミュレーション期間 設定した期間内でシミュレーションを実行します。
図 知識画面

チャート画面

チャート画面には、株価データと知識で参照している指標の値が表示されます。
指標は、プロパティ画面(プロパティ画面は、マウスの右ボタンを押下して表示します。)で表示設定しないと表示されません。
画面には、平均取得価格と、保有株数の線が表示されます。
【注意】株価指標は、表示設定しても表示されません。終値は既定で常に表示されます。

図 チャート画面
図 チャート表示設定画面

シミュレーション結果画面

株式売買のシミュレーションをした時の結果を表示します。
この画面と、チャート画面は連動して動作します。チャート画面で、マウスが売買日に位置している時、その日付の行が選択されます。逆に、この画面で、選択した行の日付にチャート画面にマークが表示されます。

図 シミュレーション結果画面

マウス位置データ表示画面

チャート画面のマウスの位置している日付の諸データを表示します。

図 マウス位置データ表示画面

アラーム画面

シミュレーション知識にDisplay操作が含まれる場合、表示されます。
この画面と、チャート画面は連動して動作します。チャート画面で、マウスがアラーム日に位置している時、その日付の行が選択されます。逆に、この画面で、選択した行の日付にチャート画面にマークが表示されます。
【例】
以下の画面は、次の知識のシミュレーションを実行した結果です。

ave1=>sma(25);
ave2=>sma(75);
slope1=>slope(25);
slope2=>slope(75);

cross=:(ave1[-1] - ave2[-1]) * (ave1[0] - ave2[0]) < 0 ;

ゴールデンクロス{
cross &&
/*どちらも上昇傾向*/
ave1[0] > ave2[0] &&
slope1[0] > 0 && slope2[0] > 0
→Display
}
図 アラーム画面

複数銘柄シミュレーション結果画面

株式売買する知識を複数銘柄についてシミュレーションすると、以下の画面が表示されます。
複数の銘柄について、知識を適応した時の利益の多い順にその結果を表示します。
任意の行をマウスでダブルクリックすると、その銘柄が選択され、その上で、「単一銘柄開始」ボタンを押下するとその結果が表示されます。

図 複数銘柄シミュレーション結果画面

知識のサンプル

サンプル1

MACDを使用して、株式の売買をシミュレートします。

株式の購入条件
当日のMACDの値が0以下で、前日のヒストグラムが負で、MACDの全変数値が1日前より大きい場合に、単位株数の6倍の株式を購入します。

株式の売却
当日のMACDの値が0以上で、前日のヒストグラムが正で、MACDの全変数値が1日前より小さく、尚かつ、当日の終値が平均取得株価より高い場合に、単位株数の4倍の株式を売却します。

macd=>macd(12,26,9);
stock=>stock();

買い
{
macd[0].macd <= 0
&& macd[-1].histogram<0
&& macd[-1].histogram < macd[0].histogram
&& macd[-1].macd < macd[0].macd
&& macd[-1].signal < macd[0].signal

buy[6]
}

売り
{
macd[0].macd > 0
&& macd[-1].histogram>0
&& macd[-1].histogram > macd[0].histogram
&& macd[-1].macd > macd[0].macd
&& macd[-1].signal > macd[0].signal
&& buyprice * 1. < stock[0].close

sell[4]
}

サンプル2

判定指標として、MACD、RSI、BB%B、SLOPEを使用して、売買をシミュレーションするサンプルです。

MACD1=>MACD(12,26,9);
RSI=>RSI(14);
BBB=>BB%B(20,1.5);
stock=>stock();
slope=>slope(20);

買いシグナル
{
/*
MACD1[0].signal < 0 &&
MACD1[0].MACD < 0 &&
MACD1[-1].histogram < 0 &&
*/
MACD1[0].histogram < 0
&& bbb[0] < 0
&& RSI[0] < 50
&& slope[0] > -10

buy[1]
}

下落強制売却
{
/* 買値より一定の幅以上に株価が触れた場合は、売却する。*/
buyprice * 0.7 > stock[0].close

sell[100]
}

上昇強制売却1
{
/* 買値より一定の幅以上に株価が触れた場合は、売却する。*/
buyprice * 1.9 < stock[0].close

sell[3]
}
上昇強制売却2
{
/* 買値より一定の幅以上に株価が触れた場合は、売却する。*/
buyprice * 3.3 < stock[0].close

sell[10]
}

売りシグナル
{
MACD1[0].signal > 0 &&
MACD1[0].MACD > 0 &&
/*
MACD1[-1].histogram > 0 &&
MACD1[0].histogram < 0 &&
*/
rsi[0] > 70
&& bbb[0] > 0.7

sell[4]
}

サンプル3

移動平均のゴールデンクロスが発生した時アラームを表示するサンプルです。

ave1=>sma(25);
ave2=>sma(75);
slope1=>slope(25);
slope2=>slope(75);

cross=:(ave1[-1] - ave2[-1]) * (ave1[0] - ave2[0]) < 0 ;

ゴールデンクロス{
cross &&
/*どちらも上昇傾向*/
ave1[0] > ave2[0] &&
slope1[0] > 0 && slope2[0] > 0
→Display
}

制限事項

特にありません。

著作権

本プログラムの著作権は、SoftHompoが所有しています。
自由に再配布してかまいません。商業目的使用の配布も自由です。
本プログラムは、利用者の責任において使用してください。