2010年05月 | ARCHIVE-SELECT | 2010年07月

| PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

| スポンサー広告 | --時--分 | comments(-) | trackbacks(-) | TOP↑

≫ EDIT

余力に応じて発注枚数を変える(イエスランゲージ練習問題)

システムトレードを続けていくと、口座残高(余力、Buyingpower)は取引結果に応じて変化します。

常に同じ枚数を取引するのではなく、今回は余力に応じて注文枚数を変化させる際の書き方を勉強しました。



/* プログラムAを利用して、以下のプログラムに改変してください。

 --- プログラムB -----------------------------------------------
 ・前提1:戦略プログラムで作成してください
 ・前提2:日経225Largeの日足チャートを利用します。
 ・前提3:初期資産を1000万円として運用します。
 ・前提4:500万円あたり1枚トレードするようにしてください(※1)

  (※1) チャート1ptあたりの倍率は1000倍になります。
     運用資産が2010万円であれば、4枚トレードができます
     運用資産が600万円であれば、1枚トレードができます。
 運用資産が499万円になると、トレードができません。

 【買い条件】
 ・条件1:20日移動平均線を終値ベースで上抜いた時
 ・条件2:ポジションを保有していない時
→ 次のBarの始値で成行買いを実行してください

 【決済条件:利益確定】
 ・条件1:買いポジションを保有している時
 ・条件2:終値確定時、エントリー価格と比べて、300円以上価格が高い時
→ 次のBarの始値で成行決済を実行し、全てのポジションを決済してください

 【決済条件:損失確定】
 ・条件1:買いポジションを保有している時
 ・条件2:終値確定時、エントリー価格と比べて300円以上価格が安い時
→ 次のBarの始値で成行決済を実行し、全てのポジションを決済してください

 問題:戦略プログラムとして作成してください。
    (※もしプログラムがわからないようであれば、考え方を分解し文章で記述してください。)

--------------------------------------------------------------------*/

// 通常版
/*
変数で初期余力1000万円、発注1枚あたりの余力指定をinputで宣言。
varで発注枚数を宣言
*/
Input: inicial_net(10000000), Per_cont(5000000);
Var: Position_Size(1);

/*
NetProfit×1000(ラージ取引倍率)+初期余力をPer_contで割り、
発注枚数を計算する。
*/
Position_Size = Int( (NetProfit * 1000 + inicial_net) / Per_cont );

if MarketPosition == 0 and ma(close,20)[1] > Close[1] and ma(close,20) < C Then
Buy("Long", AtMarket, DEF, Position_Size);

if MarketPosition == 1 and EntryPrice(0) + 300 < C Then
ExitLong("Profit", AtMarket);

if MarketPosition == 1 and EntryPrice(0) - 300 > C Then
ExitLong("Loss", AtMarket);

##################

上の書き方だと、ラージを取引する際にしか使えませんが、ミニで取引するケースも想定し、
プロパティで切り替えられるようにinputで変数を宣言したものが、次の拡張版です。

// 拡張版
/*
ラージでもミニでも対応できるようにratioという変数をinputで
宣言しておく。ラージであれば1000、ミニなら100となる。
*/
Input: inicial_net(1000), ratio(1000), Per_cont(500);
Var: Position_Size(1);

Position_Size = Int( (NetProfit * ratio + inicial_net * 10000) / (Per_cont * 10000) );

if MarketPosition == 0 and ma(close,20)[1] > Close[1] and ma(close,20) < C Then
Buy("Long", AtMarket, DEF, Position_Size);

if MarketPosition == 1 and EntryPrice(0) + 300 < C Then
ExitLong("Profit", AtMarket);

if MarketPosition == 1 and EntryPrice(0) - 300 > C Then
ExitLong("Loss", AtMarket);

##################

シストレ講習で使っている参考書です。
Yeslanguage攻略ガイドブック
Yeslanguage攻略ガイドブック



シストレブログランキング

日経225ブログランキング

スポンサーサイト

| シストレ講習 | 12時51分 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT | NEXT

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。