以下のようなFXのバックテストの結果のCSVをDFで読み込み、集計を行っております。
今、困っているのが、要素がリストの場合に上手く操作できずに詰まっております。
python
1 WINorLOSE BUYorSELL Talibシグナル \ 2370 LOSE SELL ['Belthold' 'integer' 'LongLineCandle' 'Marubozu'] 3371 LOSE SELL ['Hikkake'] 4372 LOSE SELL ['Belthold' 'Hikkake'] 5373 LOSE SELL ['GapThreeMethods'] 6374 WIN BUY ['Doji' 'Gravestone' 'LongLeggedDoji'] 7 8 Talib_Value 9370 [-100 -100 -100 -100] 10371 [-100] 11372 [-100 -200] 12373 [-100] 13374 [100 100 100]
パターンは以下のようになっています。
python
1ペア: ["USD_JPY", "EUR_USD"...] 2時間軸:["H","4H"] 3MACD判定サイズ:[21, 36, 45] 4トレンド判定:[1,-1] 5BUYかSELLか 6Talibシグナル:["TwoCrows", "ThreeBlackCrows", "ThreeInside", "ThreeLineStrike", "ThreeOutside", 7"ThreeStarsInTheSouth", "ThreeAdvancingWhiteSoldiers", "AdvanceBlock", "Belthold", "Breakaway", 8"integer", "DarkCloudCover", "Doji", "DojiStar", "DragonflyDoji", "Engulfing","EngulfingDojiStar", 9"EveningStar", "whitelines", "Gravestone", "Hammer", "HangingMan", "Harami", "HaramiCross", "HighWave", "Hikkake", "ModifiedHikkake", "Pigeon", "IdenticalThreeCrows", "InNeck", InvertedHammer", 10"LadderBottom", "LongLeggedDoji", "LongLineCandle","Marubozu", "MatchingLow", "MorningDojiStar", 11"MorningStar", "OnNeck", "Piercing", "Rickshaw", "ThreeMethods", "Separating", "ShootingStar", 12"ShortLineCandle", "Spinning", "Stalled", "Sandwich", "Takuri", "TasukiGap", "Thrusting", "Tristar", 13 "Unique", "GapThreeMethods"] 14Talib_Value:["100", "200", "-100", "-200"]
ここから集計して、CSVに出力するのですが、欲しいのは、
ペア、時間軸、MACDの判定サイズ、トレンド判定、BUYかSELLか Talibシグナル、Talib_Valueの組み合わせ毎に、
エントリー回数、勝率、勝率n%以上のTalibシグナルのリスト、勝率n%以下のTalibシグナルのリストです。
例1:
ペア:"USD_JPY"
時間軸:"H"
MACD:21
トレンド判定:1
BUYかSELL:"BUY"
Talibシグナル:"Hikkake"
Talib_Value:"-100"
出力→エントリー回数,勝率、高・低勝率のシグナルのリスト
例2:
ペア:"USD_JPY"
時間軸:"H"
MACD:21
トレンド判定:1
BUYかSELL:"BUY"
Talibシグナル:"Hikkake"
Talib_Value:"-200"
出力→エントリー回数,勝率、高・低勝率のシグナルのリスト
です。
問題なのが、Talibシグナル、Talib_Valueでして、リストで出力されたのをそのままDFに入れてCSVにしています。
読み込むと、372番は"['Belthold' 'Hikkake'] "と"[-100 -200]"という文字列の状態です。
このエントリーの時に、エントリーするか判定するメソッドで、
'Belthold'は-100、'Hikkake'は-200となっています。
その為、Hikkakeの-200の勝率を出すときに、TalibシグナルとTalib_Valueを文字列からリスト化して、'Hikkake'のインデックスを取得し、Talib_Valueのインデックスの値が-200かを判定する処理が必要になり、このあたりでうまく作れなくなりました。
作成したもの
python
1#文字列をリスト化 2df["Talib_Value"] = df["Talib_Value"].str.strip('[]').str.replace(' ', ',').str.split(',') 3df["Talibシグナル"] = df["Talibシグナル"].str.strip('[]').str.replace(' ', ',').str.replace("'", '').str.split(',') 4 5TalibMethod = "Hikkake" 6Talib_Values = ["100", "200", "-100", "-200"] 7BUYorSELLs = ["BUY", "SELL"] 8 9TV = Talib_Values[1] 10BorS = BUYorSELLs[0] 11 12dfBuy100 = df[["WINorLOSE", "BUYorSELL", "Talibシグナル", "Talib_Value"]][(df['Talibシグナル'].astype("str").str.contains(TalibMethod)) & (df["BUYorSELL"] == BorS)] 13 14print(dfBuy100[40:45]) 15 16----------出力---------- 17 18 WINorLOSE BUYorSELL Talibシグナル \ 19371 LOSE SELL [Hikkake] 20372 LOSE SELL [Belthold, Hikkake] 21387 LOSE SELL [Hikkake] 22398 WIN SELL [Hikkake] 23429 WIN SELL [Belthold, integer, Hikkake, LongLineCandle, M... 24 25 Talib_Value 26371 [-100] 27372 [-100, -200] 28387 [-100] 29398 [-100] 30429 [-100, -100, -100, -100, -100] 31
あとはTalibシグナルのインデックスを取得して、Talib_Valueのインデックスの値と比較してのbool配列取得でいいと思うのですが、うまくできず、お教え頂きたく思います。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。