2023年9月6日 星期三

![gh](https://raw.githubusercontent.com/tewei0328/picture-bed/main/2023/image.png) ```python data1 = tw_close.GetClose()[(tickLengh-leftLength-showLength):(tickLengh-leftLength)] data2 = tw_close.GetSMA(signal_SMA_Length)[(tickLengh-leftLength-showLength):(tickLengh-leftLength)] data3 = tw_close.GetMAX(signal_MAX_Length)[(tickLengh-leftLength-showLength):(tickLengh-leftLength)] #data3 data4 = tw_close.GetMIN(signal_MIN_Length)[(tickLengh-leftLength-showLength):(tickLengh-leftLength)] #data3 #signal = data1 >= data2 signal = tw_close.GetSignal()[(tickLengh-leftLength-showLength):(tickLengh-leftLength)] print("Show Tick總數: ", len(data1)) sym = 't' curve1 = p1.plot(data1) curve2 = p1.plot(data2, pen='r') curve3 = p1.plot(data3, pen='b')  #data3 curve4 = p1.plot(data4, pen='g')  #data3 curve5 = p2.plot(signal, pen =(0, 0, 200), symbolBrush =(0, 0, 200), symbolPen ='w', symbol ='t1', symbolSize = 14) #-------------------------------------------------------     if liveVer == 0:     ptr1 = tickLengh-leftLength+1 #History ver:為了取得顯示在Tick圖上的Tick之後的下一個Tick else:     ptr1=-1 # Live ver.:-1 #-------------------------------------------------------     def update1():     global data1, data2, data3, data4, signal, ptr1 #data3     data1[:-1] = data1[1:]  # 即資料左移                             #[:-1]意思是->取全部,除了最後一個 (即左移, 空出最後一個值)                             #[1:]意思是->取全部,除了第一個                             #[-1]意思是->取最後一個     data1[-1] = tw_close.GetClose()[ptr1]  #最近Tick值     data2[:-1] = data2[1:]  # 即資料左移     data2[-1] = tw_close.GetSMA(signal_SMA_Length)[ptr1]     data3[:-1] = data3[1:]  # 即資料左移 #data3     data3[-1] = tw_close.GetMAX(signal_MAX_Length)[ptr1] #data3     data4[:-1] = data4[1:]  # 即資料左移 #data3     data4[-1] = tw_close.GetMIN(signal_MIN_Length)[ptr1] #data3     signal[:-1] = signal[1:]  # shift data in the array one sample left     #--- 產生黃金交叉信號     #signal[-1] = (data1[-1] >= data2[-1]) and (data1[-2] < data2[-2])     #signal[-1] = (data1[-1] >= data2[-1])     signal[-1] = tw_close.GetSignal()[ptr1]     curve1.setData(data1)     curve2.setData(data2)     curve3.setData(data3) #data3     curve4.setData(data4) #data3     curve5.setData(signal) #data3     #-------------------------------------------------------         if liveVer == 0:         ptr1 += 1  #(history ver.: 執行)         #ptr1 += 1  #(live ver.: 不執行)         #print("ptr1=", ptr1) # update all plots def update():     update1()     #update2()     #update3() ```

google sheet-appscript-vba-1分K整理

/** @OnlyCurrentDoc */ function myFunction() {   var spreadsheet = SpreadsheetApp.getActive();   spreadsheet.getRange('F:G').activate();   spreadsheet.getActiveSheet().deleteColumns(spreadsheet.getActiveRange().getColumn(), spreadsheet.getActiveRange().getNumColumns());   spreadsheet.getRange('G:P').activate();   spreadsheet.setCurrentCell(spreadsheet.getRange('I1'));   spreadsheet.getActiveSheet().deleteColumns(spreadsheet.getActiveRange().getColumn(), spreadsheet.getActiveRange().getNumColumns());   spreadsheet.getRange('A1').activate();   spreadsheet.getCurrentCell().setValue('date');   spreadsheet.getRange('B1').activate();   spreadsheet.getCurrentCell().setValue('open');   spreadsheet.getRange('C1').activate();   spreadsheet.getCurrentCell().setValue('high');   spreadsheet.getRange('D1').activate();   spreadsheet.getCurrentCell().setValue('low');   spreadsheet.getRange('E1').activate();   spreadsheet.getCurrentCell().setValue('close');   spreadsheet.getRange('F1').activate();   spreadsheet.getCurrentCell().setValue('volume');   spreadsheet.getRange('F2').activate(); };

2023年9月5日 星期二

【Python交易程式開發現場59】*產生交易訊號 (17) | 將交易訊號送至下單函數 | 交易訊號下單在OnNotify()

# 【交易程式架構】 1. 視窗物件區,view鈕,槽函數 【V】 2. (tw函數1) 呼叫API函數區,tw呼叫類函數(連線,查報價,下單,查倉位)【III.1】 3. (tw函數2) API事件回傳用,tw回傳處理類函數(顯示回傳訊息,存Tick值,畫Tick圖,計算指標,產生訊號,自動下單)【III.2】 4. API事件回傳區 5. 外部py函數檔(將.py整個檔視為一個副程式, 用import .py載入, 如: 畫Tick圖) --- I. Qt 自訂Signal/Slot 類別 II - 群益API物件 & 公用變數 & 工具函數 III. 群益API 事件所對應之相關tw函數 (於V.槽函數所會用到的子工具函數區) IV - 群益API事件 V - View | 主視窗類別 | 按鈕送出訊號所對應之槽函數 ![[Pasted image 20230905115301.png]] ![[Pasted image 20230905125605.png]] ![gh](https://raw.githubusercontent.com/tewei0328/picture-bed/main/2023/1693898435000jframr.png) twGlobal.py ![gh](https://raw.githubusercontent.com/tewei0328/picture-bed/main/2023/1693898899000b7n4fx.png) twIndicator.py ![gh](https://raw.githubusercontent.com/tewei0328/picture-bed/main/2023/1693924139000c06cv7.png) ![gh](https://raw.githubusercontent.com/tewei0328/picture-bed/main/2023/1693924178000un1lce.png)

test

markdown #test

2023年9月4日 星期一

【Python交易程式開發現場41】*產生交易訊號 (4) | 用pyqtgraph畫動態均線圖 (twMASignal.py)

 


import matplotlib as mpl
import matplotlib.pyplot as plt
from time import perf_counter
import numpy as np
import pyqtgraph as pg
import pickle

from twIndicator import twClosePriceModel
import twGlobal
tw_close = twGlobal.twClose             #Ticks報價
tw_kbar1m = twGlobal.twKBar1M

with open('twclose.pickle', 'rb') as f:
    tw_close = pickle.load(f)           #Ticks報價


win = pg.GraphicsLayoutWidget(show=True)
win.setWindowTitle('pyqtgraph example: Scrolling Plots')

p1 = win.addPlot()


showLength = 100   # Tick圖總長度
leftLength = 500   # 動態看最後leftLength筆Ticks
tickLengh = len(tw_close.GetClose())  #取得之所有Tick數目
print("Tick總數: ", tickLengh)

# data1為顯示在Tick圖上之所有data
data1 = tw_close.GetClose()[(tickLengh-leftLength-showLength):(tickLengh-leftLength)]
data2 = tw_close.GetSMA()[(tickLengh-leftLength-showLength):(tickLengh-leftLength)]
print("Show Tick總數: ", len(data1))


curve1 = p1.plot(data1)
curve2 = p1.plot(data2)

ptr1 = tickLengh-leftLength+1 #為了取得顯示在Tick圖上的Tick之後的下一個Tick


def update1():
    global data1, data2, ptr1
    data1[:-1] = data1[1:]  # shift data in the array one sample left
                            #[:-1]意思是->取全部,除了最後一個
                            #[1:]意思是->取全部,除了第一個
                            #[-1]意思是->取最後一個
                            # (see also: np.roll)
    #data1[-1] = np.random.normal()
    data1[-1] = tw_close.GetClose()[ptr1]
    curve1.setData(data1)

    data2[:-1] = data2[1:]  # shift data in the array one sample left
    data2[-1] = tw_close.GetSMA()[ptr1]
    curve2.setData(data2)
    ptr1 += 1
    print("ptr1=", ptr1)


   
# update all plots
def update():
    update1()


timer = pg.QtCore.QTimer()
timer.timeout.connect(update)
timer.start(50)


if __name__ == '__main__':
    pg.exec()










prog-0318

test test1 Written with StackEdit .