iT邦幫忙

0

期貨當沖資料處裡疑問

每分鐘開始時進行買進
20點獲利停利 20點虧損停損

以下圖片為資料
https://ithelp.ithome.com.tw/upload/images/20200704/20127807OQJEuTuSqp.png
以下圖片是希望達成的目標
https://ithelp.ithome.com.tw/upload/images/20200704/20127807hp9dGaI88H.png
open為買進價格
希望統計每分鐘獲利還是虧損
以及獲利或虧損的時間點

以下為EXCEL檔案
https://drive.google.com/file/d/1dytr9KQl36-eTKvWKqLhQp9LPfxsyJ9f/view?usp=sharing

下面這是我的程式碼
碰到的疑問是輸出的結果我要得知第一個True是第幾個
才能知道時間點
但我不知道怎麼寫
才能得知第一個True為第幾個

停利的第一個True和和停損的第一個True
預計都得知後兩個進行判定
哪個較早判定為停損還停利
結果會有四個
停損 停利 到收盤為止都沒停損停利 那一分鐘同時發生停損和停利都行的狀況

這是我的想法和邏輯
但這有一個大問題
按照這邏輯我要寫300次
我不知道怎麼迴圈又迴圈的把它統合起來

希望有高手能幫幫忙
當然不一定要照我程式邏輯下去改
只要能輸出類似第2張圖片那樣就行

import pandas as pd

df = pd.read_excel('C:\\Users\\user\\20200102.xlsx', header=0, index_col=None)  
df = pd.DataFrame(df)

A = [0] * 300
for i in range(0,300): 
    A[i] = df.at[i, 'Open']
B = [0] * 300 
for i in range(300): 
    B[i] = df.at[i, 'High']
C = [99999] * 300 
for i in range(300): 
    C[i] = df.at[i, 'Low']    
A0 ='A[0]+20 <= B:{}'.format(A[0]+20 <= B)
A00='A[0]-20 >= C:{}'.format(A[0]-20 >= C)

B = [0] * 300 
for i in range(1,300): 
    B[i] = df.at[i, 'High']
C = [99999] * 300 
for i in range(1,300): 
    C[i] = df.at[i, 'Low']
A1 ='A[1]+20 <= B:{}'.format(A[1]+20 <= B)
A11='A[1]-20 >= C:{}'.format(A[1]-20 >= C)

B = [0] * 300 
for i in range(2,300): 
    B[i] = df.at[i, 'High']
C = [99999] * 300 
for i in range(2,300): 
    C[i] = df.at[i, 'Low']
A2 ='A[2]+20 <= B:{}'.format(A[2]+20 <= B)
A22='A[2]-20 >= C:{}'.format(A[2]-20 >= C)

print(A0)

print(A00)

print(A1)

print(A11)

print(A2)

print(A22)

補充說明

A[0]來說A[0]+20 <= B在第6個時發生True 也就是8:51
A[0]-20 >= C在第38個時發生True
但是9:01已經停利
所以A[0]-20>= C發生較晚所以不算

換一些方式講其實如果你是在第一分鐘時賣出一口
理論上8:51要停損
但如果繼續凹單的話
不堅持策略
在第38分鐘可以獲利
這是題外話

四個發生情形
第一個就是A[0]來說A[0]+20 <= B
A[0]-20 >= C
看哪個較早

第三種情形發生True位子一樣
通常發生在1分鐘上下波動較大
這樣停利還是停損
要看每秒的成交明細
才能知道哪個情形發生
但這種情形不常發生

第四種就是全都是False
通常在接近收盤時會大機率發生

這邊0和99999
是因為要判定之後的
前面的不用判定
所以設0和99999
判定必為False

B = [0] * 300
for i in range(1,300):
B[i] = df.at[i, 'High']

C = [99999] * 300
for i in range(1,300):
C[i] = df.at[i, 'Low']
A[1]+20 <= B
A[1]-20 >= C

下面是輸出結果

A[0]+20 <= B:[False False False False False  True  True False False False False False
 False False False False  True  True  True  True  True False False  True
  True  True  True  True False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False  True  True  True False False False False False False
 False False False False False  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True]  
A[0]-20 >= C:[False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False  True  True False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False]
 A[1]+20 <= B:[False False False False False  True False False False False False False
 False False False False  True  True False False False False False False
  True  True  True  True False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True]
  A[1]-20 >= C:[False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False  True  True  True  True False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False]
 A[2]+20 <= B:[False False False False False False False False False False False False
 False False False False  True  True False False False False False False
 False  True False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True]
  A[2]-20 >= C:[False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False  True
  True  True  True  True  True  True  True  True  True  True  True False
 False  True  True False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False
 False False False False False False False False False False False False]
 
KYC World iT邦新手 5 級 ‧ 2020-07-05 10:11:09 檢舉
要不要試著瞭解流程判斷式呢?
If(????==????and???==):
Do something
elif (????==????):
Do another thing
Else
Not if and not elif Python will do this block

2 個回答

1
rogeryao
iT邦高手 1 級 ‧ 2020-07-05 18:56:20
最佳解答
rowmax = 300
for i in range(0, rowmax-2) :
     for x in range(i + 1, rowmax -1) :
         if df.at[x, 'High'] - df.at[i, 'Open'] >=20 :
             print(df.at[x, 'Time'])
             print('+')
             break
         
         elif df.at[i, 'Open'] - df.at[x, 'Low'] >=20 :
             print(df.at[x, 'Time'])
             print('-')
             break

Python 沒玩過 ,邏輯大致如上.
請參閱

看更多先前的回應...收起先前的回應...

感謝回答
剛剛試一下
輸出結果
已經有達成知道每個時間點正負
但無法知道哪個時間點發生停利和停損

後續時間沒有
就是我說的第四種狀況
無停利也無停損

當無停利無停損時
後續想變完整應該試1:30(通常當沖不會到1:45在平倉)
價格去減open計算 + -以及值

至於一分鐘內發生停利也行停損也行
這小概率發生的
應該就是拿掉不統計

再次感謝你的回答提供我方向

08:46:00
+
08:47:00
+
08:48:00
+
08:49:00
+
08:50:00
-
08:51:00
-
08:52:00
-
08:53:00
-
08:54:00
-
08:55:00
-
08:56:00
-
08:57:00
+
08:58:00
+
08:59:00
+
09:00:00
+
09:01:00
-
09:02:00
-
09:03:00
-
09:04:00
-
09:05:00
-
09:06:00
-
09:07:00
-
09:08:00
+
09:09:00
-
09:10:00
-
09:11:00
-
09:12:00
-
09:13:00
-
09:14:00
-
09:15:00
-
09:16:00
-
09:17:00
-
09:18:00
-
09:19:00
-
09:20:00
-
09:21:00
+
09:22:00
+
09:23:00
+
09:24:00
+
09:25:00
+
09:26:00
+
09:27:00
+
09:28:00
+
09:29:00
+
09:30:00
+
09:31:00
+
09:32:00
+
09:33:00
+
09:34:00
+
09:35:00
+
09:36:00
+
09:37:00
+
09:38:00
+
09:39:00
+
09:40:00
+
09:41:00
+
09:42:00
+
09:43:00
+
09:44:00
+
09:45:00
+
09:46:00
+
09:47:00
+
09:48:00
+
09:49:00
+
09:50:00
+
09:51:00
+
09:52:00
+
09:53:00
+
09:54:00
+
09:55:00
+
09:56:00
+
09:57:00
+
09:58:00
+
09:59:00
+
10:00:00
+
10:01:00
+
10:02:00
+
10:03:00
+
10:04:00
+
10:05:00
+
10:06:00
+
10:07:00
+
10:08:00
+
10:09:00
+
10:10:00
+
10:11:00
+
10:12:00
+
10:13:00
+
10:14:00
+
10:15:00
+
10:16:00
+
10:17:00
+
10:18:00
+
10:19:00
+
10:20:00
+
10:21:00
+
10:22:00
+
10:23:00
+
10:24:00
+
10:25:00
+
10:26:00
+
10:27:00
+
10:28:00
+
10:29:00
+
10:30:00
+
10:31:00
+
10:32:00
+
10:33:00
+
10:34:00
+
10:35:00
+
10:36:00
+
10:37:00
+
10:38:00
+
10:39:00
+
10:40:00
+
10:42:00
+
10:43:00
+
10:44:00
+
10:45:00
+
10:46:00
+
10:47:00
+
10:48:00
+
10:49:00
+
10:50:00
+
10:51:00
+
10:52:00
+
10:53:00
+
10:54:00
+
10:55:00
+
10:56:00
+
10:57:00
+
10:58:00
+
10:59:00
+
11:00:00
+
12:13:00
-
12:15:00
-
12:16:00
-
12:17:00
-
12:18:00
-
12:19:00
-
12:20:00
-
12:21:00
-
12:22:00
-
12:23:00
-
12:24:00
-
12:25:00
-
12:26:00
-
12:34:00
-
12:35:00
-
12:36:00
-
12:37:00
-
12:38:00
-
12:39:00
-
12:40:00
-
12:41:00
-
12:42:00
-
rogeryao iT邦高手 1 級 ‧ 2020-07-05 19:25:24 檢舉

我剛有更新 , 你在看一下

已經有完成我要的結果了
感謝

明明基礎語法大概知道
然後想延伸應用
就各種碰壁
看來還時要再多多練習


08:51:00
+
08:51:00
+
09:02:00
+
09:02:00
+
09:20:00
-
09:17:00
-
09:20:00
-
09:20:00
-
09:20:00
-
09:20:00
-
09:20:00
-
09:02:00
+
09:02:00
+
09:03:00
+
09:03:00
+
09:20:00
-
09:20:00
-
09:08:00
-
09:20:00
-
09:17:00
-
09:20:00
-
09:20:00
-
09:11:00
+
09:20:00
-
09:20:00
-
09:17:00
-
09:20:00
-
09:17:00
-
09:20:00
-
09:20:00
-
09:20:00
-
09:20:00
-
09:23:00
-
09:21:00
-
09:23:00
-
09:48:00
+
09:43:00
+
09:43:00
+
09:37:00
+
09:42:00
+
09:43:00
+
09:48:00
+
09:43:00
+
09:48:00
+
09:43:00
+
09:48:00
+
09:43:00
+
09:48:00
+
09:49:00
+
09:48:00
+
09:48:00
+
09:49:00
+
09:49:00
+
09:49:00
+
09:49:00
+
09:49:00
+
09:49:00
+
09:49:00
+
10:05:00
+
09:49:00
+
10:03:00
+
10:04:00
+
10:04:00
+
10:05:00
+
10:22:00
+
10:22:00
+
10:08:00
+
10:05:00
+
10:05:00
+
10:08:00
+
10:05:00
+
10:05:00
+
10:05:00
+
10:05:00
+
10:05:00
+
10:08:00
+
10:08:00
+
10:08:00
+
10:22:00
+
10:24:00
+
10:32:00
+
10:32:00
+
10:39:00
+
10:39:00
+
10:32:00
+
10:32:00
+
10:32:00
+
10:32:00
+
10:32:00
+
10:36:00
+
10:32:00
+
10:32:00
+
10:36:00
+
10:32:00
+
10:39:00
+
10:39:00
+
10:39:00
+
11:01:00
+
11:10:00
+
10:40:00
+
10:40:00
+
10:40:00
+
11:01:00
+
11:10:00
+
11:18:00
+
11:14:00
+
11:18:00
+
11:40:00
+
11:18:00
+
11:18:00
+
11:18:00
+
11:39:00
+
11:40:00
+
11:54:00
+
12:16:00
+
12:15:00
+
12:15:00
+
11:40:00
+
11:40:00
+
11:40:00
+
12:15:00
+
11:40:00
+
11:14:00
+
11:18:00
+
11:18:00
+
11:54:00
+
12:16:00
+
12:16:00
+
12:16:00
+
12:16:00
+
12:15:00
+
12:15:00
+
12:15:00
+
12:15:00
+
13:31:00
-
13:31:00
-
13:10:00
-
13:20:00
-
13:10:00
-
13:20:00
-
13:20:00
-
13:20:00
-
13:31:00
-
13:31:00
-
13:20:00
-
13:31:00
-
13:31:00
-
13:20:00
-
13:20:00
-
13:20:00
-
13:20:00
-
13:20:00
-
13:20:00
-
13:20:00
-
13:20:00
-
13:20:00
-

其實你參考的那篇
我在找資料時也有找到
但我就沒有想到能這樣用
QQ

0
微甜的酸
iT邦新手 5 級 ‧ 2020-07-05 06:29:09

把那些True放進Dict或List,之後他的index就是它的位置。期貨我是看不懂啦!
但結果有四種的話,將解果除4應該就可以知道他是第幾分鐘跟第幾個了。
至於你的問題是要將所有結果遍歷一次的話那,試試enumerate

看更多先前的回應...收起先前的回應...

我有稍微補充說明
你可以看一下
然後我也有嘗試想把輸出結果變List
但一直沒成功

哇!那是甚麼鬼啊!我的畫面被你的Tue/False佔滿了XD
解釋一下數學公式要怎麼算,我來試試看。

每一個判定都是要判定300次
也沒啥公式
舉個例子
假設現在大盤10000點
你在10000點時買進一口期貨
10020點時
你就賺20點
9980時
你就虧20點
停利 停損
停利意思就是當你賺20點時平倉
停損意思就是當你虧20點時平倉

平倉 就是如果你買進
平倉就是賣出
如果剛開始是賣出
平倉就是買進

我是每分鐘開始時進行買進
也就是Open
我要統計每個分鐘Open都買進
他的盈虧是如何

high 那分鐘最高價
low 那分鐘最低價
close 那分鐘收盤價
volume 成交量

所以只跟High/Low有關囉那幹嘛執行三百次?等全部run完在run一次就好啦~

我大概的想法:

import pandas as pd
import numpy as np

df = pd.read_excel("Excel的名稱.xlsx", usecols = ["Date", "High", "Low"])

"在最後新增一行名為Boolean"

for i in range(len(df)):
    if "第 i 格的High" > "第 i 格的Low":
      "填入Boolean:True"
    elif "第 i 格的High" < "第 i 格的Low":
      "填入Boolean:False"
    else:
      "平倉"

print(df)

我想表達的好像沒傳遞出去
我自己再想想

對不起QQ~

我要發表回答

立即登入回答