Tíquete #10498

乱数を発生する関数を実装して欲しい
: 2007-05-30 10:27 Última Atualização: 2010-03-04 23:59

Relator:
(Anônimo)
Dono:
Estado:
Fechado
Componente:
(Nenhum)
Prioridade:
5 - Medium
Gravidade:
5 - Medium
Resolução:
Fixed
Arquivo:
Nenhum

Details

t_sugaです。

指値に対する約定の仕方を制御するのに
使おうと考えています。
①スリッページの発生にも使える。
②ロングの通常指値の場合、
 翌日の始値より高く指値があれば始値で約定
 翌日の始値と安値の間にあれば指値で約定
 安値より下なら約定しない。

これにより、
実際の売買シミュレーションに
近づくと思うのですが。

Ticket History (3/14 Histories)

2007-05-30 11:59 Updated by: None
Comentário
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;
}
}
2007-05-30 15:21 Updated by: None
Comentário
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;
}
2007-06-02 19:58 Updated by: panacoran
Comentário
Logged In: YES
user_id=6886

乱数の必要性がよく理解できません。指値がどう約定するかは翌
日の値動きを調べればわかります。どのようなentryもexitも、乱
数がなくてもシミュレーション可能です。

示していただいた乱数を発生する関数は乱数を返しません。
Randromクラスは、同じインスタンスについてNextを呼び続ける間
しか、乱数を返すことができません。別のインスタンスの返す数
字は、前のインスタンスの返した数字について乱数にはなりませ
ん。
2007-06-02 20:31 Updated by: None
Comentário
Logged In: NO

t_suga

自動売買ルールの有効性だけを
シミュレーションするのであれば、乱数は必要ありません。

しかし、実際の売買の場合、
指値の出し方で約定する時もあるし、
約定しない時もあります。
指値を出すタイミングによっては、
スリッページが発生し、高値掴みになる時もあります。

有効性のあるシステムが出来たとしても、
実際の売買に近いシミュレーションをした時、
どの程度利益を出せるかを、乱数で約定の仕方を
制御し、実際の売買でも有効かどうかを
検証可能かと考えました。
この辺の考え方は、乱数が無くとも出来るのでしょうか?
2007-06-03 01:10 Updated by: panacoran
Comentário
Logged In: YES
user_id=6886

何がしたいかわかってきました。

自分の売買の仕方(たとえば指値の出し方)で値の付き方が変わ
るような銘柄は、システムトレードの対象にしてはいけません。
これはシステムトレードの基本です。そうしないと、有効な検証
ができませんから。

乱数を使って検証したとしても、実際の市場は乱数によって導か
れる振る舞いとは違うのですから、検証したことにはなりませ
ん。

システムトレードなんて、普通は寄付の成行でしか売買しないも
のですよ。難しく考えすぎでは?
2007-06-03 09:15 Updated by: None
Comentário
Logged In: NO

t_sugaです。

だから、寄付きとか、大引けで
大口の約定が在るのは、そう言う事なんですね。

5月30日に投稿した、コードでも
Print(Rnd(10))で、確認して見ると
0~10まで、ランダムに数値が現れますが
これでは、使えないのでしょうか?

6月2日の説明を読んでも、
プログラムの構造を理解出来ていないので
修正が必要でしたら、参考にしますので、
コードを教えて頂けると有り難いです。

2007-06-03 19:17 Updated by: panacoran
Comentário
Logged In: YES
user_id=6886

乱数に見えるかもしれませんが、それは呼び出した時刻に応じて
異なる値が返っているだけで、乱数ではありません。

乱数を生成するには、一度生成したRandomクラスのインスタンス
を、ずっとどこかに保持しておかなければならないのです。そう
簡単には乱数を返す関数は実装できません。
2007-06-03 20:29 Updated by: None
Comentário
Logged In: NO

>そう簡単には乱数を返す関数は実装できません。

という事は、
static型でもないんでしょうね。
有難う御座いました。
2010-01-23 07:10 Updated by: panacoran
  • Resolução Update from Nenhum to Fixed
  • Dono Update from (Nenhum) to panacoran
Comentário

いまさらですが、staticで簡単に実装できたので実装してみました。

2010-02-11 14:55 Updated by: None
Comentário

実装されたという乱数取得関数の使い方を教えて下さい。

2010-02-11 16:11 Updated by: panacoran
Comentário

最新のマニュアルの5章と6章に書いてあります。

float Random()
	0.0以上1.0未満の浮動小数点の乱数。
int Random(int maxValue)
	0以上maxValue未満の整数の乱数。
このような仕様になっています。

2010-02-28 05:27 Updated by: None
Comentário

ありがとうございます。
ところで最新のマニュアルとはどこにありますか?
オンラインでもスナップショットのpt-100117でも記載されていなかったので。

2010-02-28 23:54 Updated by: panacoran
Comentário

リポジトリの中にあるのが最新です。
まぎらわしいので新しいスナップショットをリリースしました。

2010-03-04 23:59 Updated by: panacoran
  • Estado Update from Aberto to Fechado
  • Ticket Close date is changed to 2010-03-04 23:59
  • Marco Update from (Nenhum) to バージョン1.5 (fechado)
Comentário

動いているはずですので完了にします。

Attachment File List

No attachments

Editar

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login