次のコードは、値が次の行でヒットまたはミスしたかどうかを識別し、条件が満たされた時間を示す出力列を提供します。完全一致ではなく - より大きい値をキャプチャするようにコードを修正する
import datetime,numpy as np,pandas as pd;
nan = np.nan;
a = pd.DataFrame( {'price': {datetime.time(9, 0): 1, datetime.time(10, 0): 0, datetime.time(11, 0): 3, datetime.time(12, 0): 4, datetime.time(13, 0): 7, datetime.time(14, 0): 6, datetime.time(15, 0): 5, datetime.time(16, 0): 4, datetime.time(17, 0): 0, datetime.time(18, 0): 2, datetime.time(19, 0): 4, datetime.time(20, 0): 7}, 'reversal': {datetime.time(9, 0): nan, datetime.time(10, 0): nan, datetime.time(11, 0): nan, datetime.time(12, 0): nan, datetime.time(13, 0): nan,
datetime.time(14, 0): 6.0, datetime.time(15, 0): nan, datetime.time(16, 0): nan, datetime.time(17, 0): nan, datetime.time(18, 0): nan, datetime.time(19, 0): nan, datetime.time(20, 0): nan}});
a['target_hit_time']=a['target_miss_time']=nan;
a['target1']=a['reversal']+1;
a['target2']=a['reversal']-a['reversal'];
a.sort_index(1,inplace=True);
hits = a.ix[:,:-2].dropna();
for row,hit in hits.iterrows():
forwardRows = [row]<a['price'].index.values
targetHit = a.index.values[(hit['target1']==a['price'].values) & forwardRows][0];
targetMiss = a.index.values[(hit['target2']==a['price'].values) & forwardRows][0];
if targetHit>targetMiss:
a.loc[row,"target_miss_time"] = targetMiss;
else:
a.loc[row,"target_hit_time"] = targetHit;
a
この画像は容易にこのコードを実行することによって再生することができる上記のコードからの出力を示しています。
私が持っている問題は、このコードは、実際のデータに使用されたときということです価格は正確には一致しない可能性があります。私たちは、以下の画像を見ればそう:
我々は値>= 7.5
を探しているだけの価値7.5
を探していなかった場合target1
基準が満たされることを参照してください。誰でもこのコードを修正してください。
ロバートこれはとても素敵な感謝です! – ade1e
今日はあなたのコードを理解して理解するのに時間がかかりました。これは私が学ぶのに非常に便利なので、あなたが入れてくれた努力に感謝します。私たちに 'a.sort_index(1、inplace = True);が必要な理由を理解してください。私たちは列に基づいてソートを行っていますが、どうしてですか?ソート列の前には – ade1e
があります: "price reversal target_hit_time target_miss_time target1 target2"; 「価格反転目標1目標2目標_時間_目標_利益_時間」となる。あなたが知っているべきことはすべて...ただあなたの魂を試しになるようにしました。何か問題がなければ気になります。通常、私は推測したり、そのように働いているようにチェック: "a.sort_index(0、inplace = True); a.sort_index(1、inplace = True);"それから二人のうちの一人を取っている:D。 –