<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
   <channel>
      <title>kaburobo tech support　- kaburobo.net/support/: Javaカブロボ</title>
      <link>http://kaburobo.net/support/</link>
      <description>カブロボ開発者のための公式技術サポートBLOGです</description>
      <language>ja</language>
      <copyright>Copyright 2011</copyright>
      <lastBuildDate>Mon, 02 Nov 2009 12:30:00 +0900</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>【FAQ】SDKを起動してバックテストをすると重いです。</title>
         <description><![CDATA[Q:SDKを起動してバックテストをすると重いです。何してはるんですか？
この画面が長時間表示され、バックテスト開始まで待たされます。

<pre class="console" style="font-family:monospace; line-height:1em; background:black; color:white;"
><code>よろしければ[Enter]キーまたは start と打って[Enter]キーを押してください。</code>
<code>キャンセルする場合は quit と打って[Enter]キーを押してください。</code>
<code>ヘルプを表示する場合は help と打って[Enter]キーを押してください。</code>
<code>&gt; <em style="font-style:italic;">start</em> <kbd style="color:lightgreen;">[Enter]</kbd></code>
<code>初期化中です。環境によっては時間がかかる事があります。</code></pre>

A:株価データを読み込んでいます。
データを先読みしておくことで後のシミュレーションを素早くこなすことが可能になります。テストを行う期間が長いほどこの方法が有利に働きます。
また、作成されるカブロボは過去の株価データを参照することが殆どであるため、例えば3年間データ中の最後の半年だけのテストにおいても、3年分全てのデータをSDKが読むことになります。]]></description>
         <link>http://kaburobo.net/support/2009/11/qsdk.html</link>
         <guid>http://kaburobo.net/support/2009/11/qsdk.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">FAQ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">お問い合わせ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Mon, 02 Nov 2009 12:30:00 +0900</pubDate>
      </item>
            <item>
         <title>Q: SDKが解凍できません</title>
         <description>A: SDKのダウンロードの仕組みに不具合がございました。 修正が完了しまして、現在は正常に解凍しインストールすることができます。 ご迷惑をおかけしましたことを、お詫びいたします。</description>
         <link>http://kaburobo.net/support/2009/08/q_sdk.html</link>
         <guid>http://kaburobo.net/support/2009/08/q_sdk.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
        
        
         <pubDate>Thu, 20 Aug 2009 23:43:43 +0900</pubDate>
      </item>
            <item>
         <title>カブロボのJavaプログラミングルール変更（使用不可メソッドの追加）</title>
         <description><![CDATA[カブロボのJavaプログラミングルールに、以下の項目を追加いたしました。
このルールに該当する場合、Javaカブロボのソースのアップロード時に、その旨のメッセージが表示されます。

<strong><code>java.lang.Object.finalize</code> メソッドオーバーライドとその同名のメソッドの使用不可</strong>

<a href="http://www.kaburobo.jp/files/sdk/help/kaburobo_programming_rule.pdf">Javaプログラマー用補足資料</a>もご参照ください。]]></description>
         <link>http://kaburobo.net/support/2008/07/javarule_080730_01.html</link>
         <guid>http://kaburobo.net/support/2008/07/javarule_080730_01.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Wed, 30 Jul 2008 10:00:00 +0900</pubDate>
      </item>
            <item>
         <title>【お知らせ】ETF機能対応のカブロボSDK2.1.0正式リリース</title>
         <description><![CDATA[ETF機能対応のカブロボSDK2.1.0をリリースいたしました。

ログイン後、カブロボ工房から<a href="https://www.kaburobo.jp/user/login/?p=doc/get_sdk/">ダウンロード</a>して頂き、カブロボを開発して頂くことができます。
お試し頂けたら幸いです。

ETF対応のSDKまたKBユニバーサルの使用方法については以下のページをご参照ください。

*<a href="http://www.kaburobo.jp/doc/etf/">ETF機能対応のカブロボについて</a>

今回の修正履歴は以下の通りです。

2008/04/14 version 2.1.0
【新機能】新しいテクニカル関数として騰落レシオが実装されました。AnalysisManager#getUpDownRatio()から実行出来ます。
【改良】自動損切り値をrobot-config.xmlに記述することで、ユーザーによる設定が可能になりました。
【修正】InformationManager#getEtfNikkei225List および #getEtfTopixList の戻り値が不正だった問題を修正しました。

また、カブロボルールにも一部以下のようなルールが追加されました。

・株式分割・株式併合もしくはそれに準ずるコーポレートアクションが予定されていた場合はその前後20 日間において新規注文が禁止され、保有している銘柄に関しては強制的に反対売買が執行されます。

*<a href="http://www.kaburobo.jp/files/sdk/help/kaburobo_building_rule.pdf">カブロボ作成ルール／仕様(PDF)</a>]]></description>
         <link>http://kaburobo.net/support/2008/04/sdk210_080414.html</link>
         <guid>http://kaburobo.net/support/2008/04/sdk210_080414.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">お知らせ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Mon, 14 Apr 2008 18:00:00 +0900</pubDate>
      </item>
            <item>
         <title>MarketRanking (ランキングデータ) を使ったサンプルロボット</title>
         <description><![CDATA[MarketRanking の機能にフォーカスしたサンプルコードを解説いたします。
MarketRanking には多くのデータが日々更新されていますので、これを期にマスターしましょう。
基本的な使い方は

 import jp.tradesc.superkaburobo.sdk.trade.data.EnumMarketRankingType;
 import jp.tradesc.superkaburobo.sdk.trade.data.MarketRanking; 

と書いて <code>EnumMarketRankingType</code> と <code>MarketRanking</code> を import します。
次に

ArrayList &lt; MarketRanking &gt; rankingList =
tradeAgent.getInformationManager().getMarketRanking(EnumMarketRankingType.DROP_RATE);

のように書いてデータを取得します。
例では値下がり幅のデータを取得するために EnumMarketRankingType.DROP_RATE を使っていましたが、
EnumMarketRankingType にはDROP_RATE だけでなく合計で21種類データを取得することができます。
<code style="font-weight:bold; line-height:1em;">
DIVIDEND:配当利回り上位
DROP_CREDIT_BUYING:信用買残減上位 
DROP_CREDIT_SALE:信用売残減上位 
DROP_RANGE:値下がり幅 
DROP_RATE:値下がり率 
HIGH_CREDIT_RATIO:信用高倍率上位 
HIGH_PBR:高PBR 
HIGH_PER:高PER 
LOW_CREDIT_RATIO:信用低倍率上位 
LOW_PBR:低PBR 
LOW_PER:低PER 
NET_PROFIT_RATE:純利益成長率上位 
ORDINARY_PROFIT_RATE:経常利益成長率上位 
RISE_CREDIT_BUYING:信用買残増上位 
RISE_CREDIT_SALE:信用売残増上位 
RISE_RANGE:値上がり幅 
RISE_RATE:値上がり率 
SALES_RATE:売上高成長率上位 
VALUE:売買代金 
VOLUME:出来高 
VOLUME_RATE:出来高乖離率
</code>
それでは、実際に MarketRanking を使ったカブロボを作ってみましょう。
今回は、SDKに付属する SampleRobot の screening メソッドを書き換えるだけでできます。
戦略は前日-3%以上値下がりした銘柄を次の日に買う、というシンプルな短期逆張りロボットです。

短期保有にするためには、SampleRobot の order メソッドの中の、orderReverseByRate の保有日数を調整する必要があります。 

コードは以下のようになります。
<code>
<span style="color:#808080;">01</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;</span><span style="color:#646464;">@Override</span>
<span style="color:#808080;">02</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>public&nbsp;</b></span><span style="color:#7f0055;"><b>void&nbsp;</b></span><span style="color:#000000;">screening</span><span style="color:#000000;">(</span><span style="color:#000000;">TradeAgent&nbsp;tradeAgent</span><span style="color:#000000;">)&nbsp;{</span>
<span style="color:#808080;">03</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color:#808080;">04</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;オブジェクトメモを用意し、null&nbsp;チェックを行います。</span>
<span style="color:#808080;">05</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">SampleObjectMemo&nbsp;memo&nbsp;=&nbsp;</span><span style="color:#000000;">(</span><span style="color:#000000;">SampleObjectMemo</span><span style="color:#000000;">)&nbsp;</span><span style="color:#000000;">MemoManager.getInstance</span><span style="color:#000000;">()</span><span style="color:#000000;">.getObjectMemo</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span>
<span style="color:#808080;">06</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>if</b></span><span style="color:#000000;">(</span><span style="color:#7f0055;"><b>null&nbsp;</b></span><span style="color:#000000;">==&nbsp;memo</span><span style="color:#000000;">)&nbsp;</span><span style="color:#000000;">memo&nbsp;=&nbsp;</span><span style="color:#7f0055;"><b>new&nbsp;</b></span><span style="color:#000000;">SampleObjectMemo</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span>
<span style="color:#808080;">07</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color:#808080;">08</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;注文予定リストを用意し、null&nbsp;チェックを行います。</span>
<span style="color:#808080;">09</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">ArrayList&lt;SampleObjectRecord&gt;&nbsp;memoList&nbsp;=&nbsp;memo.getMemoList</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span>
<span style="color:#808080;">10</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>if</b></span><span style="color:#000000;">(</span><span style="color:#7f0055;"><b>null&nbsp;</b></span><span style="color:#000000;">==&nbsp;memoList</span><span style="color:#000000;">)&nbsp;</span><span style="color:#000000;">memoList&nbsp;=&nbsp;</span><span style="color:#7f0055;"><b>new&nbsp;</b></span><span style="color:#000000;">ArrayList&lt;SampleObjectRecord&gt;</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span>
<span style="color:#808080;">11</span>
<span style="color:#808080;">12</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">ArrayList&lt;MarketRanking&gt;&nbsp;rankingList&nbsp;=&nbsp;tradeAgent.getInformationManager</span><span style="color:#000000;">()</span><span style="color:#000000;">.getMarketRanking</span><span style="color:#000000;">(</span><span style="color:#000000;">EnumMarketRankingType.DROP_RATE</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span>
<span style="color:#808080;">13</span>
<span style="color:#808080;">14</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>for</b></span><span style="color:#000000;">(</span><span style="color:#000000;">MarketRanking&nbsp;r&nbsp;:&nbsp;rankingList</span><span style="color:#000000;">)</span>
<span style="color:#808080;">15</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">{</span>
<span style="color:#808080;">16</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//-3%以内の値下がり率の銘柄は買わない</span>
<span style="color:#808080;">17</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>if</b></span><span style="color:#000000;">(</span><span style="color:#000000;">r.getData</span><span style="color:#000000;">()&nbsp;</span><span style="color:#000000;">&gt;=&nbsp;-</span><span style="color:#990000;">3</span><span style="color:#000000;">)</span>
<span style="color:#808080;">18</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">{</span>
<span style="color:#808080;">19</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>break</b></span><span style="color:#000000;">;</span>
<span style="color:#808080;">20</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">}</span>
<span style="color:#808080;">21</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">RobotLogManager.getInstance</span><span style="color:#000000;">()</span><span style="color:#000000;">.log</span><span style="color:#000000;">(</span><span style="color:#000000;">r.getStock</span><span style="color:#000000;">()</span><span style="color:#000000;">.getStockName</span><span style="color:#000000;">()</span><span style="color:#000000;">,&nbsp;</span><span style="color:#990000;">3</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span>
<span style="color:#808080;">22</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">RobotLogManager.getInstance</span><span style="color:#000000;">()</span><span style="color:#000000;">.log</span><span style="color:#000000;">(</span><span style="color:#000000;">r.getData</span><span style="color:#000000;">()</span><span style="color:#000000;">.toString</span><span style="color:#000000;">()</span><span style="color:#000000;">,&nbsp;</span><span style="color:#990000;">3</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span>
<span style="color:#808080;">23</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//購入予定に追加</span>
<span style="color:#808080;">24</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">memoList.add</span><span style="color:#000000;">(</span><span style="color:#7f0055;"><b>new&nbsp;</b></span><span style="color:#000000;">SampleObjectRecord</span><span style="color:#000000;">(</span><span style="color:#000000;">r.getStock</span><span style="color:#000000;">()</span><span style="color:#000000;">,&nbsp;true,&nbsp;</span><span style="color:#990000;">111</span><span style="color:#000000;">,&nbsp;</span><span style="color:#2a00ff">&#34;値下がり率ランキング&#34;</span><span style="color:#000000;">))</span><span style="color:#000000;">;</span>
<span style="color:#808080;">25</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">}</span>
<span style="color:#808080;">26</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color:#808080;">27</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;オブジェクトメモにセットします。</span>
<span style="color:#808080;">28</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">memo.setMemoList</span><span style="color:#000000;">(</span><span style="color:#000000;">memoList</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span>
<span style="color:#808080;">29</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<span style="color:#808080;">30</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;オブジェクトメモを登録します。</span>
<span style="color:#808080;">31</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">MemoManager.getInstance</span><span style="color:#000000;">()</span><span style="color:#000000;">.setObjectMemo</span><span style="color:#000000;">(</span><span style="color:#000000;">memo</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span>
<span style="color:#808080;">32</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;</span><span style="color:#000000;">}</span>
</code>

<p>●<strong>ソースコードダウンロード</strong><br /><br />
<a href="http://www.kaburobo.jp/files/sample/SampleMarketRankingRobot.java">SampleMarketRankingRobot.java</a><br />
※カブロボをお使いのPCで実行するには、カブロボSDKが必要です。<br />
　別途、カブロボサイトからカブロボSDKを<a href="https://www.kaburobo.jp/user/login/?p=doc/get_sdk/">ダウンロード</a>しご利用ください。<br />
</p>]]></description>
         <link>http://kaburobo.net/support/2008/03/marketranking_sample_robot01.html</link>
         <guid>http://kaburobo.net/support/2008/03/marketranking_sample_robot01.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">サンプル</category>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Wed, 05 Mar 2008 18:00:00 +0900</pubDate>
      </item>
            <item>
         <title>【お知らせ】ETF対応版カブロボSDK2.1.0-rc2版とカブロボ成績表作成ツール1.0.4-rc1リリース</title>
         <description><![CDATA[ETF機能対応のカブロボSDK2.1.0 RC2版、および、カブロボ成績表作成ツール1.0.4 RC1版をリリースいたしました。

ログイン後、カブロボ工房から<a href="https://www.kaburobo.jp/user/login/?p=doc/get_sdk/">ダウンロード</a>して頂き、カブロボを開発して頂くことができます。
お試し頂けたら幸いです。

また、成績表も作成できるようになりました。
通常通り、カブロボサイトにてアップロード、また稼動テスト、日々の運用を行うこともできます。

ETF対応のSDKの使用方法については以下のページをご参照ください。

*<a href="http://kaburobo.net/support/2007/11/etfsdk210beta1_071112.html">ETF機能対応のカブロボSDK2.1.0-beta1版リリース</a>
*<a href="http://kaburobo.net/support/2007/11/etfsamplerobot.html">ETFを売買するサンプルロボット</a>

今回の修正履歴は以下の通りです。

2008/01/21 version 2.1.0 RC2
【改良】成績表作成ツールのETF対応に伴う内部修正を行いました。
【修正】2.1.0 RC1より最終成績表作成時に例外が発生することがあった問題を修正しました。]]></description>
         <link>http://kaburobo.net/support/2008/01/sdk210rc2_080121.html</link>
         <guid>http://kaburobo.net/support/2008/01/sdk210rc2_080121.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">お知らせ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Mon, 21 Jan 2008 18:00:00 +0900</pubDate>
      </item>
            <item>
         <title>【お知らせ】カブロボSDK2.1.0-rc1版リリース</title>
         <description><![CDATA[ETF機能対応のカブロボSDK2.1.0 RC版をリリースいたしました。

ログイン後、カブロボ工房から<a href="https://www.kaburobo.jp/user/login/?p=doc/get_sdk/">ダウンロード</a>して頂き、カブロボを開発して頂くことができます。
お試し頂けたら幸いです。

また、カブロボサイトにてアップロード、また稼動テスト、日々の運用を行うこともできるようになりました。

ETF対応のSDKの使用方法については以下のページをご参照ください。

*<a href="http://kaburobo.net/support/2007/11/etfsdk210beta1_071112.html">ETF機能対応のカブロボSDK2.1.0-beta1版リリース</a>
*<a href="http://kaburobo.net/support/2007/11/etfsamplerobot.html">ETFを売買するサンプルロボット</a>

今回の修正履歴は以下の通りです。

2008/01/07 version 2.1.0 rc1
【改良】上場前銘柄を、InformationManager#getStockList(Category) にて取得出来ないようにしました。
【修正】InformationManager#getEtfList() にて null を含んだ ArrayList が返る場合があった問題を修正しました。
【修正】株式分割または併合にて端株が売れない問題を修正しました。
        (配布しているSDKでは発生いたしません。日々の運用にて発生する場合がありました)]]></description>
         <link>http://kaburobo.net/support/2008/01/sdk210rc1_080107.html</link>
         <guid>http://kaburobo.net/support/2008/01/sdk210rc1_080107.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">お知らせ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Mon, 07 Jan 2008 18:00:00 +0900</pubDate>
      </item>
            <item>
         <title>ETFを売買するサンプルロボット</title>
         <description><![CDATA[<p>今回は新しく追加されたETF機能にフォーカスしたサンプルロボットを解説したいと思います。<br />
ポートフォリオに ETF がなければ買い、あれば売りをするだけの単純なカブロボです。<br /></p>

<p>●<b>ETFとは</b></p>
<p>ETF について、及び ETF 対応カブロボ SDK については <a href="http://kaburobo.net/support/2007/11/etfsdk210beta1_071112.html">ETF 機能対応のカブロボSDK 2.1.0-beta1版リリースのお知らせ</a>もご参照ください。</p>

<p>●<b>コードの説明</b></p>
<p>サンプルソースコード行の先頭には行数が付与されています。実際のソースコードでは行数の記述は不要です。</p>

<p><code><br />
<span style="color:#808080;">36</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;ETF&nbsp;の銘柄リストをつくります。</span><br />
<span style="color:#808080;">37</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">ArrayList&lt;Stock&gt;&nbsp;etfStockList&nbsp;=&nbsp;</span><span style="color:#7f0055;"><b>new&nbsp;</b></span><span style="color:#000000;">ArrayList&lt;Stock&gt;</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span><br />
<span style="color:#808080;">38</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>for</b></span><span style="color:#000000;">(</span><span style="color:#000000;">Category&nbsp;cat:&nbsp;im.getEtfList</span><span style="color:#000000;">()){</span><br />
<span style="color:#808080;">39</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">etfStockList.addAll</span><span style="color:#000000;">(</span><span style="color:#000000;">cat.getStockList</span><span style="color:#000000;">())</span><span style="color:#000000;">;</span><br />
<span style="color:#808080;">40</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">}</span><br />
</code><br />
ETFの情報は<code>InformationManager</code>(<code>im</code>)の<code>getEtfList</code>メソッドで取得することができます。<br />
for文を回してETFだけのリストを作ります。<br /></p>

<p><code><br />
<span style="color:#808080;">42</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;1銘柄ずつ保有していれば売り、保有していなければ買います。</span><br />
<span style="color:#808080;">43</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>for&nbsp;</b></span><span style="color:#000000;">(</span><span style="color:#000000;">Stock&nbsp;etf&nbsp;:&nbsp;etfStockList</span><span style="color:#000000;">)&nbsp;{</span><br />
</code><br />
<code>etfStockList</code>から<code>Stock</code>型のオブジェクトが取得できるので、これを元に売買命令を出します。<br /></p>

<p><code><br />
<span style="color:#808080;">44</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>if</b></span><span style="color:#000000;">(</span><span style="color:#000000;">pm.isHolding</span><span style="color:#000000;">(</span><span style="color:#000000;">etf</span><span style="color:#000000;">)){</span><br />
<span style="color:#808080;">45</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;保有しているので全量を&nbsp;即時&nbsp;成行&nbsp;で売却します。</span><br />
<span style="color:#808080;">46</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>for&nbsp;</b></span><span style="color:#000000;">(</span><span style="color:#000000;">Portfolio&nbsp;portfolio&nbsp;:&nbsp;pm.getPortfolio</span><span style="color:#000000;">())&nbsp;{</span><br />
<span style="color:#808080;">47</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;このポートフォリオが&nbsp;ETF&nbsp;銘柄か調べます。</span><br />
<span style="color:#808080;">48</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>if</b></span><span style="color:#000000;">(</span><span style="color:#000000;">etf.equals</span><span style="color:#000000;">(</span><span style="color:#000000;">portfolio.getStock</span><span style="color:#000000;">())){</span><br />
<span style="color:#808080;">49</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;ETF&nbsp;なので売却します。</span><br />
<span style="color:#808080;">50</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">portfolio.orderReverseNowMarketAll</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span><br />
<span style="color:#808080;">51</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">}</span><br />
<span style="color:#808080;">52</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">}</span><br />
<span style="color:#808080;">53</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">}&nbsp;</span><span style="color:#7f0055;"><b>else&nbsp;</b></span><span style="color:#000000;">{</span><br />
</code><br />
銘柄を保有しているかどうかを調べます。<br />
保有していた場合はその銘柄（ETF）を売却します。<br /></p>

<p><code><br />
<span style="color:#808080;">53</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">}&nbsp;</span><span style="color:#7f0055;"><b>else&nbsp;</b></span><span style="color:#000000;">{</span><br />
<span style="color:#808080;">54</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;保有していない&nbsp;ETF&nbsp;なので、新規に買い注文を出します。</span><br />
<span style="color:#808080;">55</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br />
<span style="color:#808080;">56</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;買い注文を出すために、前日終値を取得し、数量を計算します。</span><br />
<span style="color:#808080;">57</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">StockData&nbsp;lastSession&nbsp;=&nbsp;im.getStockSession</span><span style="color:#000000;">(</span><span style="color:#000000;">etf</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span><br />
<span style="color:#808080;">58</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>if</b></span><span style="color:#000000;">(</span><span style="color:#000000;">lastSession&nbsp;==&nbsp;</span><span style="color:#7f0055;"><b>null</b></span><span style="color:#000000;">)&nbsp;</span><span style="color:#7f0055;"><b>continue</b></span><span style="color:#000000;">;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;最後の場の情報を取得できなかったのでこの銘柄をスキップします。</span><br />
<span style="color:#808080;">59</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">Integer&nbsp;closingPrice&nbsp;=&nbsp;lastSession.getClosingPrice</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span><br />
<span style="color:#808080;">60</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>if</b></span><span style="color:#000000;">(</span><span style="color:#000000;">closingPrice==&nbsp;</span><span style="color:#7f0055;"><b>null</b></span><span style="color:#000000;">)&nbsp;</span><span style="color:#7f0055;"><b>continue</b></span><span style="color:#000000;">;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;最後の場の終値が取得できなかったのでこの銘柄をスキップします。</span><br />
<span style="color:#808080;">61</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br />
<span style="color:#808080;">62</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;注文数&nbsp;(総資産の40%)&nbsp;&nbsp;(前日の終値)</span><br />
<span style="color:#808080;">63</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>int&nbsp;</b></span><span style="color:#000000;">qty&nbsp;=&nbsp;orderMoney&nbsp;&nbsp;&nbsp;/&nbsp;closingPrice.intValue</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span><br />
<span style="color:#808080;">64</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br />
<span style="color:#808080;">65</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;注文を出します。</span><br />
<span style="color:#808080;">66</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#7f0055;"><b>if&nbsp;</b></span><span style="color:#000000;">(</span><span style="color:#000000;">!&nbsp;om.orderActualNowMarket</span><span style="color:#000000;">(</span><span style="color:#000000;">etf,&nbsp;qty</span><span style="color:#000000;">)&nbsp;)&nbsp;{</span><br />
<span style="color:#808080;">67</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#3f7f5f;">//&nbsp;失敗した場合ログに理由と共に出力します。</span><br />
<span style="color:#808080;">68</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">rlm.log</span><span style="color:#000000;">(</span><span style="color:#000000;">etf.getStockName</span><span style="color:#000000;">()</span><span style="color:#000000;">+</span><span style="color:#2a00ff;">&#34;&nbsp;&#34;</span><span style="color:#000000;">+qty+</span><span style="color:#2a00ff;">&#34;株(終値:&#34;</span><span style="color:#000000;">+closingPrice+</span><span style="color:#2a00ff;">&#34;&nbsp;注文額:&#34;</span><span style="color:#000000;">+</span><span style="color:#000000;">(</span><span style="color:#000000;">closingPrice*qty</span><span style="color:#000000;">)</span><span style="color:#000000;">+</span><span style="color:#2a00ff;">&#34;&nbsp;)の注文に失敗しました:&nbsp;&#34;</span><span style="color:#000000;">+om.getLastOrderResult</span><span style="color:#000000;">()</span><span style="color:#000000;">.toJapanese</span><span style="color:#000000;">())</span><span style="color:#000000;">;</span><br />
<span style="color:#808080;">69</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">}</span><br />
<span style="color:#808080;">70</span>&nbsp;<span style="color:#ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color:#000000;">}</span><br />
</code><br />
保有していない場合、前日の終値と <code>orderMoney</code> (1回の注文で購入する1銘柄あたりの金額) から買う株数を計算します。<br />
<code>om.orderActualNowMarket(etf, qty)</code> で実際に注文をし、失敗した場合はログに記録します。<br /></p>

<p>●<b>ソースコードダウンロード</b><br />
<a href="http://www.kaburobo.jp/files/sample/SampleEtfRobot.java">SampleEtfRobot.java</a><br />
※カブロボをお使いのPCで実行するには、カブロボSDKが必要です。<br />
　別途、カブロボサイトからカブロボSDKを<a href="https://www.kaburobo.jp/user/login/?p=doc/get_sdk/">ダウンロード</a>しご利用ください。<br />
　また、ETFを使うためには <code>robot-config.xml</code> を事前に修正しておく必要があります。<br />
　修正方法は <code>robot-config.html</code> (SDK付属の help/doc ディレクトリ内にございます)をご覧ください。<br /></p>
]]></description>
         <link>http://kaburobo.net/support/2007/11/etfsamplerobot.html</link>
         <guid>http://kaburobo.net/support/2007/11/etfsamplerobot.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">サンプル</category>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Wed, 21 Nov 2007 15:00:00 +0900</pubDate>
      </item>
            <item>
         <title>【FAQ】カブロボサイトでの稼動テストと拡張検証パックでのテストの結果の違いについて</title>
         <description>カブロボサイトでの稼動テストと拡張検証パックを使用したときのJavaカブロボのテストの結果
の差異について、ご質問がありましたのでお答えいたします。

以下の要因により、結果が変わる可能性があります。

・本番サーバーでは、日々株式分割より株価が修正されたり、
　上場廃止より対象銘柄から外れたりしておりと、株価データの違いが考えられます。

・本番サーバーのカブロボSDKは、最新のものを使用しておりますので、
　お使いのカブロボSDKとのバージョンの違いが考えられます。

テストのバリエーションも豊富ですし、処理も高速なので、
カブロボの検証テストは、カブロボサイトでも行うことをお勧めいたします。</description>
         <link>http://kaburobo.net/support/2007/11/faq_071114_01.html</link>
         <guid>http://kaburobo.net/support/2007/11/faq_071114_01.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">FAQ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
        
        
         <pubDate>Wed, 14 Nov 2007 17:04:48 +0900</pubDate>
      </item>
            <item>
         <title>【お知らせ】ETF機能対応のカブロボSDK2.1.0-beta1版リリース</title>
         <description>ETF機能対応のカブロボSDK2.1.0ベータ版をリリースいたしました。

ETF とは、&quot;Exchange Traded Fund&quot;の略で、
東証などの取引所で取引きされている投資信託のことを指しています。
カブロボでは、

1330 上場インデックスファンド225
1306 TOPIX連動型上場投資信託

の2銘柄を取り扱います。

ログイン後、カブロボ工房からダウンロードして頂き、カブロボを開発して頂くことができます。
お試し頂けたら幸いです。

お試し版であるため、カブロボサイトにアップロードまたオンラインテスト等はまだできません。
近日中にご利用頂けるようになる予定です。
安定版のカブロボSDK2.0.3は、通常通り行えます。

以下に、ETF対応のSDKの使用方法を簡単にご説明いたします。

●ETFを使うために
robot-config.xml を事前に修正しておきます。
指定方法は SDK付属のrobot-config.html のドキュメントをご覧ください。

●ETFの使い方
ETFは通常の銘柄と同様に扱うことができます。
OrderManagerクラスで通常の銘柄同様注文します。
成行、指値、逆指値も可能です。
また、空売りもできます。

●ETFのStockクラスの取得方法
詳しい内容は、JavaDocをご覧ください。

for(Category cat: InformationManager.getInstance().getEtfList()){
cat.getStockList()
}

EnumETFCodeList
InformationManager.getInstance().getEtfList()
InformationManager.getInstance().getEtfNikkei225List()
InformationManager.getInstance().getEtfTopixList()

●ETFと通常の銘柄の違い
- robot-config.xml の修正が必要
- 業種コードが10000以上 (通常は10000未満)
- ETF では出来高制限無し
- 出来高、売買代金は取得可能
- 銘柄詳細情報（stock_detail）では、PER, PBR は必ず -1 が返るが、それ以外は取得可能</description>
         <link>http://kaburobo.net/support/2007/11/etfsdk210beta1_071112.html</link>
         <guid>http://kaburobo.net/support/2007/11/etfsdk210beta1_071112.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">お知らせ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Mon, 12 Nov 2007 18:00:00 +0900</pubDate>
      </item>
            <item>
         <title>【お知らせ】新刊「よくわかるJava」</title>
         <description><![CDATA[「株式自動売買ソフトウェア 株ロボを作ろう！」の著者である鳥海氏が
「よくわかるJava」というJavaの入門書を発刊いたしましたのでお知らせいたします。<a href="http://www.amazon.co.jp/dp/4798017736/">amazonへのリンク</a>

これからJavaのプログラミングを始められる方に最適な入門書です。 
ご活用いただければ幸いです。
]]></description>
         <link>http://kaburobo.net/support/2007/09/java_book_070927.html</link>
         <guid>http://kaburobo.net/support/2007/09/java_book_070927.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">お知らせ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Thu, 27 Sep 2007 15:00:00 +0900</pubDate>
      </item>
            <item>
         <title>トレーリングストップのサンプルロボット</title>
         <description><![CDATA[<a href="#0">トレーリングストップとは</a> | <a href="#1">簡単な設定例</a> | <a href="#2">コード説明</a> | <a href="#3">ソースコードダウンロード</a>

<a name="0"></a>
●<b>トレーリングストップとは</b>

トレーリングストップとは、利益になっているトレードにおいて、利益を確実に確定するという手法であり、利益から損失に変えない為のトレード手法です。逆指値の値段を株価に合わせて上げていくことで利益確定のラインを決定します。
設定できるのは以下の4項目です。
・<b>目標値（％）</b>
・<b>ストップロス（％）</b>
・<b>損切り（％）</b>
・<b>最長ホールド日数（日）</b>

<b>目標値</b>にはトレーリングストップが発動する条件を指定します。
5%と指定すると、高値が購入金額×1.05を超えるとトレーリングストップの注文を出します。

<b>ストップロス</b>には目標値を超えたときに、最高値を基準にストップロスの値段を設定します。
2%と指定すると、最高値×0.98の金額で逆指値注文を出します。

<b>損切り</b>には株価の安値を基準に反対売買注文を出します。
3%と指定すると、安値が購入金額×0.97を下回ったら、即時成行で反対売買注文を出します。

<b>最長ホールド日数</b>には保有する日数を設定します。
どのような場合でも、この期間が過ぎたら即時成行で反対注文を行います。

この説明は現物買いのときを前提にしていますが、信用売りを行っている場合もこの設定で大丈夫です。 つまり、信用売りの場合は安値が購入金額×0.95を下回ったら、トレーリングストップが発動し、最安値×1.05で逆指値の返済注文を出します。 最安値を更新すると逆指値の値段は下がっていきます。 

<a name="1"></a>
●<b>簡単な設定例</b>

カブロボSDKに付属するサンプルロボットに利益率が5%以上の銘柄に対してTrailing Stopの戦略を適応しました。
サンプルロボットでは保有銘柄の利益率が15%上がったら利益確定売りを行うのですが、Trailing Stopの戦略を行うことによって、 損益率がさらにあがっても利益確定売りライン（逆指値注文）を自動的に引き上げてくれるので、利益を確保しながら利益を伸ばすことができます。
また、損切りを購入株価の-6%の値段で逆指値注文を常に繰り返すことによって、サンプルロボットの損切りラインを過ぎてから成り行き売買で損切りを行うよりも、 リスクをコントロールすることができます。 

1年でのトータル純損益 <b>9.94%</b>
平均利益 <b>7.45%</b>
平均損益 <b>-4.79%</b>

■<b>資産推移グラフ</b> 
<img src="http://www.kaburobo.jp/images/support/asset_history.png" width="580" height="320" alt="サンプルロボット パフォーマンス">

単純にバイアンドホールドでは生み出せない高い収益と安定性。

■<b>サンプルロボットのトレード毎実現損益率別件数ヒストグラム</b>
<img src="http://www.kaburobo.jp/images/support/sample_tradestat_profloss_ratecount_histgram.png" width="580" height="320" alt="サンプルロボット パフォーマンス">

■<b>トレイリングストップ戦略実装サンプルロボットのトレード毎実現損益率別件数ヒストグラム</b>
<img src="http://www.kaburobo.jp/images/support/trailing_stop_tradestat_profloss_ratecount_histgram.png" width="580" height="320" alt="トレイリングストップ戦略実装サンプルロボット パフォーマンス">

数10%以上値上がりする銘柄も、利益確定売りせずにホールドし続けます。
また逆指値注文による損切りを行うことで、設定した-6%前後で損切りできていることがわかります。

<a name="2"></a>
●<b>コード説明</b>
行数
018&nbsp;<b>public</b> <b>class</b> TrailingStopSampleRobot extends SampleRobot {
019 
020&nbsp;&nbsp;&nbsp;@Override
021&nbsp;&nbsp;&nbsp;<b>public</b> <b>void</b> order(TradeAgent tradeAgent) {  
022 
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 保存してあるメモを取得します。
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SampleObjectMemo memo = (SampleObjectMemo) tradeAgent.getMemoManager().getObjectMemo();
025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// メモが null の時のことを考えて null チェックをします。
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>if</b>(memo == <b>null</b>) <b>return</b>;
027     
028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// シグナルと反対のポジションを解消します。
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;orderReverseBySignal(memo);

SampleTrailingStopクラスはSampleRobotクラスを継承しています。
orderNewメソッドとorderReverseBySignalメソッドとscreeningメソッドはそのまま使用しますので、SampleTrailingStopクラスで記述する必要がありません。
orderメソッドは挙動が違うのでオーバーライドします。

行数
031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ポートフォリオを参照します
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList<Portfolio> portfolioList = tradeAgent.getPortfolioManager().getPortfolio();
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>for</b> (Portfolio portfolio : portfolioList) {
034 
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// トレーリングストップ注文を行います。
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;orderTrailingStop(portfolio, 5.0, 7.0, 6.0, 300);
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

自分のportfolioListを取得し、for文でポジションごとにトレーリングストップメソッドを呼び出します。
36行目の場合、
目標値（損益率）が５％を超えたらトレーリングストップを実行し
最高値より７％低いの金額で逆指値注文をします。
また目標値に届かなかった場合、買った値段より６％の金額で逆指値注文をして損切りします。
最後の３００は保有日数が３００日を超えたとき、どのような場合でも即時成行で反対注文を行います。 

行数
085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 保有銘柄の期間中の株価をリストとして取得します
086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList<StockData> stockDataList = im.getStockSessionByInterval(
087&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;portfolio.getExecDate(), tm.getCurrentDate(), stock);
088
089&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>for</b> (<b>int</b> i=0;  i  < stockDataList.size();  i ++)
090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StockData stockData = stockDataList.get(i);
092 
093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>if</b> ( i == stockDataList.size()-1 )
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 新規売買を行ったセッションのみ終値で判断を行います。
096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (高値・安値と約定価格の順序関係を認識できないため)
097         
098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>if</b> (peakPrice < stockData.getClosingPrice())
099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;peakPrice = stockData.getClosingPrice();
100         
101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>if</b> (bottomPrice > stockData.getClosingPrice())
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bottomPrice = stockData.getClosingPrice();
103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>else</b>
105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>if</b> (peakPrice < stockData.getHighPrice())
107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;peakPrice = stockData.getHighPrice();
108         
109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>if</b> (bottomPrice > stockData.getLowPrice())
110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bottomPrice = stockData.getLowPrice();
111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

保有期間中の最高値と最安値を算出します。
stockDataListにstockで指定された銘柄の「portfolio.getExecDate」（購入日）から「tm.getCurrentDate」（今日）までの四本値を格納します。
for文で一日ごとを比較し最高値と最安値を算出します。
新規売買した日は高値・安値と約定価格の順序関係を認識できないため、終値のみを使います。

行数
118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>if</b> (portfolio.getExecQty() > 0)
119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
120&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 現物買いトレードについての判断
121 
122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// オーダータイミング2：ストップロスの逆指値注文を行います。
123 
124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 買付け後の最大利益率
125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>double</b> profitPeakRatio = ((<b>double</b>)peakPrice / execPrice - 1) * 100;
126 
137       
138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 目標達成の判定
139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>if</b> ( profitPeakRatio > targetRate )
140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 逆指値注文価格
142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>int</b> orderPrice = (<b>int</b>)(peakPrice * (1 - (stopLossRate / 100)));
143   
144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;orderReverseStopForPortfolio(
145&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;portfolio,
146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;orderPrice,
147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"トレーリングストップによる売却 取得後の高値:" + peakPrice
148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);
149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>return</b>;
150&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

現物買いと信用売りで注文価格が異なるので場合わけします。
portfolio.getExecQtyが0より大きい場合現物買いなので、
現物買いに対応する注文値段を計算します。
その後、買付け後の最大利益率を計算し、
最大利益率が目標値を上回った場合にorderReverseStopForPortfolioメソッドを呼び出して逆指値注文を出します。

行数
152&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// オーダータイミング3：損切りの対象です。
153       
154&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 現物買いトレードの場合の損切り
155&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>int</b> lossCutPrice = (<b>int</b>)(execPrice * (1 - (lossCutRate / 100)));
156&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//損切りのための逆指値注文を行います。
157&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;orderReverseStopForPortfolio(
158&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;portfolio,
159&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lossCutPrice,
160&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"現物買いの損切り:"
161&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;); 

最大利益率が目標値を上回っていなかった場合は損切りのための逆指値注文を行います。

行数
217&nbsp;&nbsp;&nbsp;<b>protected</b> <b>void</b> orderReverseStopForPortfolio(Portfolio portfolio,<b>int</b> orderPrice, String reason){
218&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ポートフォリオから直接反対売買注文を行います。
219&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>boolean</b> result = portfolio.orderReverseNowStopAll(orderPrice);

orderReverseStopForPortfolioメソッドで実際に逆指値注文を行います。
portfolio.orderReverseNowStopAll(orderPrice);で指定した値段で逆指値注文を行います。
その後はログを出力します。 

<a name="3"></a>
●<b>ソースコードダウンロード</b>
<a href="http://www.kaburobo.jp/files/sample/TrailingStopSampleRobot.java">TrailingStopSampleRobot.java</a>
※このロボットはSampleRobot.java、SampleObjectMemo.javaがないと動作しません。
カブロボをお使いのPCで実行するには、カブロボSDKが必要です。<br />
別途、カブロボサイトからカブロボSDKを<a href="https://www.kaburobo.jp/user/login/?p=doc/get_sdk/">ダウンロード</a>しご利用ください。<br />]]></description>
         <link>http://kaburobo.net/support/2007/08/trailingstopsamplerobot.html</link>
         <guid>http://kaburobo.net/support/2007/08/trailingstopsamplerobot.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">サンプル</category>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Mon, 27 Aug 2007 15:00:00 +0900</pubDate>
      </item>
            <item>
         <title>【TIPS】成績指標(1)</title>
         <description>成績指標(1)

カブロボでは成績や特徴を評価するために多数の成績指標が用意されています。
このコーナーでは複数回に渡って様々な成績指標を解説します。

◆トータル純損益

カブロボがどれだけ資産を増やせたかを計る、最もシンプルで大切な成績指標です。
運用期間中の資産の増加率をトータル純損益と呼びます。

例えば、5000万円の資金を6000万円に増やした場合、トータル純損益は20%になります。
逆に4000万円に減らしてしまった場合は-20%です。
売却・買戻ししていない保有株式も時価で評価します。

◆年率換算利回り

トータル純損益を複利で１年間あたりに換算した値です。

例えば、半年間のトータル純損益が10%だった場合、
半年を１年間に換算するために２乗します。
1.1を２乗した1.21、すなわち21%が年率換算利回りです。

運用期間が１年未満で短い場合は、極端な数字になりやすいので注意が必要です。
運用期間が１年を超える場合は、トータル純損益よりも0に近い数字になります。</description>
         <link>http://kaburobo.net/support/2007/08/tips_070808.html</link>
         <guid>http://kaburobo.net/support/2007/08/tips_070808.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">KBストラテジー</category>
                  <category domain="http://www.sixapart.com/ns/types#category">KBユニバーサル</category>
                  <category domain="http://www.sixapart.com/ns/types#category">カブロボTips</category>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Wed, 08 Aug 2007 15:00:00 +0900</pubDate>
      </item>
            <item>
         <title>【TIPS】銘柄の売買判断順序を工夫しよう</title>
         <description>限られた資金を効率的に運用するには、銘柄の売買判断順序がとても重要です。
「値上がり率順」や「売買代金順」、「配当利回り順」など、２１種類の順序から簡単に選ぶことができます。
設定する際は下記の方法・箇所をご利用下さい。

◆Java Kaburobo SDK

InformationManagerクラスのgetMarketRanking()メソッド

◆KBユニバーサル

「2. 銘柄を選ぶ 」の「銘柄ソート」ページ

◆KBストラテジー

「投資戦略ウィザード」をご利用の場合は、
「基本戦略」ページの「注目株（ランキング）」項目

「詳細設定」をご利用の場合は、
「基本戦略」の「行動」の「注目株(ランキング)」項目</description>
         <link>http://kaburobo.net/support/2007/08/tips_070807.html</link>
         <guid>http://kaburobo.net/support/2007/08/tips_070807.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">KBストラテジー</category>
                  <category domain="http://www.sixapart.com/ns/types#category">KBユニバーサル</category>
                  <category domain="http://www.sixapart.com/ns/types#category">カブロボTips</category>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Tue, 07 Aug 2007 15:00:00 +0900</pubDate>
      </item>
            <item>
         <title>【TIPS】出力ログを確認しよう</title>
         <description>7月初旬より、カブロボサイト上で、運用中のカブロボに出力ログの表示機能がつきました。
プログラムから標準出力した内容がこのログビューアで見ることができます。

特に、SDKで開発されている方はご自分のロボットが運用環境ではどんなログを
出力しているのか気になるのではないでしょうか？

現時点はサーバ負荷の影響を考え、100行を上限とさせていただいています。
今後チューニングを重ね、すべてのログを見れるように改善していきたいと思います。</description>
         <link>http://kaburobo.net/support/2007/07/tips.html</link>
         <guid>http://kaburobo.net/support/2007/07/tips.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Javaカブロボ</category>
                  <category domain="http://www.sixapart.com/ns/types#category">カブロボTips</category>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Thu, 19 Jul 2007 15:00:00 +0900</pubDate>
      </item>
      
   </channel>
</rss>

