PREV | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

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

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

≫ EDIT

TimeToMinutesとMinutesToTime(イエスランゲージ練習問題)

イエスランゲージ練習問題。今回は時間にまつわる関数の上手な使い方を勉強しました。

まずは、基本の課題と解答。

しかし、応用しようと思うと思わぬ落とし穴がありました。



◆問題
様々な分足に対応できるよう、デイトレードで終わるようなプログラムをInputを利用して考えてください。

cf. 寄り付き後の最初のBarでEntryするような条件を作成しましょう。

##############################################
// 5分足チャートを利用
//足の期間をinputで指定
Input: Bar_Int(5);
Var: Ex_minutes(0),Ex_time(0);

/*
15*60+10=910・・・910分つまり15:10を
示す
Bar_Int * 2 で大引けよりバー2本手前を示す
*/
Ex_minutes = 15*60 + 10 - Bar_Int * 2;

/*
Int関数は整数値を示す関数
FracPortionは少数部分値を示す関数
例)900÷60=15。15*10000でYesの認識する6桁の値になり、
  15時を示す。※Yeslanguageは秒の二桁を省略できない
*/
Ex_time = Int(Ex_minutes/60) * 10000 + FracPortion(Ex_minutes/60) * 10000;

//寄付でエントリー
If Date[1] <> Date then
Buy("Long");

//決済発注時刻
If time[1] < Ex_time and time > Ex_time then
ExitLong("Ex_Long", AtMarket);
##############################################


>>15時(150000)に決済するような書き方なら問題ないのですが、次のようなケースではうまくいきません。


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

Input: Bar_Int(5);
Var: Ex_minutes(0),Ex_time(0);

Ex_minutes =((15*60) + 10) - (Bar_Int * 8);

/*
例)「Bar_Int * "8"」にしてEx_minutesが870だった場合を想定。
意図としては14:30を表したい。
870÷60は14.5になる。整数値×10000=140000になる。
870÷60の少数部分値0.5×10000=5000
Ex_timeは145000
*/
Ex_time = Int(Ex_minutes/60) * 10000 + FracPortion(Ex_minutes/60) * 10000;

MessageLog("Ex_minutes=%.2f Ex_time=%.2f",Ex_minutes,Ex_time);

/*
Ex_minutesは870なのだが、Ex_timeが「143000」になってくれていない
添付画像参照
*/

/*寄付でエントリー*/
If Date[1] <> Date Then
Buy("Long");

/*決済発注時刻*/
If time[1] < Ex_time and time > Ex_time then
ExitLong("Ex_Long", AtMarket);
##############################################
0610kadai01.jpg

(先生からのアドバイス)
「今のやり方だと10進法で数字を計算していますが、時間は60進法で進むので不正確になってしまいます。」

なるほど。900=15時というのは一致しても。870は14時30分と捉えてくれないのですね。


TimeToMinutes関数MinutesToTime関数の活用

(MinutesToTime関数)
夜12時以後から経過した時間を分単位時間で計算。
var1= TimeToMinutes(143000) → 与えられた時間が 14時30分00秒なら870をリターンします。

(MinutesToTime関数)
与えられた分単位のデータを時間単位で計算。時間は 24時間で表現。
var1= MinutesToTime (870)→ 与えられたデータが 870なら 14時30分をリターンします。

講習会ではこの2つの関数を使う方法を勉強しました。

##########################################################
/*足の期間をinputで指定*/
Input: Bar_Int(5);
Var: Ex_minutes(0),Ex_time(0);

Ex_minutes = TimeToMinutes(151000) - Bar_Int * 8;
Ex_time = MinutesToTime(Ex_minutes);


MessageLog("Ex_minutes=%.2f Ex_time=%.2f",Ex_minutes,Ex_time);

//Ex_minutesが870で、Ex_timeが「143000」になっています
//下記添付画像参照

/*寄付でエントリー*/
If Date[1] <> Date Then
Buy("Long");

/*決済発注時刻*/
If time[1] < Ex_time and time > Ex_time then
ExitLong("Ex_Long", AtMarket);
##########################################################
0610kadai02.jpg


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

日経225ブログランキング
スポンサーサイト

| シストレ講習 | 10時29分 | comments:1 | trackbacks:0 | TOP↑

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

| | 2010/06/15 14:42 | |















非公開コメント

http://systemtradeindex.blog27.fc2.com/tb.php/36-c84ffa9e

PREV | PAGE-SELECT | NEXT

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