Sourceforge Tracker Monitor
norep****@sourc*****
2007年 6月 3日 (日) 01:10:30 JST
Feature Requests item #10498, was opened at 2007-05-30 10:27 You can respond by visiting: https://sourceforge.jp/tracker/?func=detail&atid=3143&aid=10498&group_id=816 Category: None Group: None Status: Open Priority: 5 Submitted By: (None) Assigned to: (None) Summary: 乱数を発生する関数を実装して欲しい Initial Comment: t_sugaです。 指値に対する約定の仕方を制御するのに 使おうと考えています。 ?スリッページの発生にも使える。 ?ロングの通常指値の場合、 翌日の始値より高く指値があれば始値で約定 翌日の始値と安値の間にあれば指値で約定 安値より下なら約定しない。 これにより、 実際の売買シミュレーションに 近づくと思うのですが。 ---------------------------------------------------------------------- >Comment By: panacoran (panacoran) Date: 2007-06-03 01:10 Message: Logged In: YES user_id=6886 何がしたいかわかってきました。 自分の売買の仕方(たとえば指値の出し方)で値の付き方が変わ るような銘柄は、システムトレードの対象にしてはいけません。 これはシステムトレードの基本です。そうしないと、有効な検証 ができませんから。 乱数を使って検証したとしても、実際の市場は乱数によって導か れる振る舞いとは違うのですから、検証したことにはなりませ ん。 システムトレードなんて、普通は寄付の成行でしか売買しないも のですよ。難しく考えすぎでは? ---------------------------------------------------------------------- Comment By: (None) Date: 2007-06-02 20:31 Message: Logged In: NO t_suga 自動売買ルールの有効性だけを シミュレーションするのであれば、乱数は必要ありません。 しかし、実際の売買の場合、 指値の出し方で約定する時もあるし、 約定しない時もあります。 指値を出すタイミングによっては、 スリッページが発生し、高値掴みになる時もあります。 有効性のあるシステムが出来たとしても、 実際の売買に近いシミュレーションをした時、 どの程度利益を出せるかを、乱数で約定の仕方を 制御し、実際の売買でも有効かどうかを 検証可能かと考えました。 この辺の考え方は、乱数が無くとも出来るのでしょうか? ---------------------------------------------------------------------- Comment By: panacoran (panacoran) Date: 2007-06-02 19:58 Message: Logged In: YES user_id=6886 乱数の必要性がよく理解できません。指値がどう約定するかは翌 日の値動きを調べればわかります。どのようなentryもexitも、乱 数がなくてもシミュレーション可能です。 示していただいた乱数を発生する関数は乱数を返しません。 Randromクラスは、同じインスタンスについてNextを呼び続ける間 しか、乱数を返すことができません。別のインスタンスの返す数 字は、前のインスタンスの返した数字について乱数にはなりませ ん。 ---------------------------------------------------------------------- Comment By: (None) Date: 2007-05-30 15:21 Message: Logged In: NO t_sugaです。 これだけで、充分でしょうか private Value Random(Value[] args, int at) { int seed = (int)args[0].InnerValue; if (0 <= seed && seed <= 255) { Random hRandom = new Random(); int iResult = hRandom.Next(seed); return new Value(iResult); } else return null; } ---------------------------------------------------------------------- Comment By: (None) Date: 2007-05-30 11:59 Message: Logged In: NO t_sugaです。 以下のように作って、動作はしているようです。 何しろ、C#は良く分からないので まずい箇所がありましたら、 修正を箇所を指摘してください。 お願いいたします。 hash.Add(new FunctionType("Rnd", 1), new DelegateExecuter.Delegate(Random)); /// <summary> /// 乱数を取得します。 /// </summary> /// <param name="args">引数の配列</param> /// <param name="at">@作用素の値</param> /// <returns>乱数です。</returns> private Value Random(Value[] args, int at) { int seed = (int)args[0].InnerValue; Random hRandom = new System.Random(); int iResult = hRandom.Next(seed); try { return new Value(iResult); } catch (IndexOutOfRangeException) { return null; } } ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.jp/tracker/?func=detail&atid=3143&aid=10498&group_id=816