<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>自動下單 &#8211; FinLab</title>
	<atom:link href="https://www.finlab.tw/tag/%E8%87%AA%E5%8B%95%E4%B8%8B%E5%96%AE/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.finlab.tw</link>
	<description>深入淺出的量化投資，讓你在在茫茫股海中，找到專屬於自己的投資方法</description>
	<lastBuildDate>Thu, 19 Nov 2020 05:37:20 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.9</generator>

<image>
	<url>https://www.finlab.tw/wp-content/uploads/2020/07/favicon.png</url>
	<title>自動下單 &#8211; FinLab</title>
	<link>https://www.finlab.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">179699571</site>	<item>
		<title>用 Python 超簡單自動下單</title>
		<link>https://www.finlab.tw/%e9%80%9a%e7%94%a8%e8%87%aa%e5%8b%95%e4%b8%8b%e5%96%ae%e6%b3%95%ef%bc%88%e4%b8%8b%ef%bc%89/</link>
					<comments>https://www.finlab.tw/%e9%80%9a%e7%94%a8%e8%87%aa%e5%8b%95%e4%b8%8b%e5%96%ae%e6%b3%95%ef%bc%88%e4%b8%8b%ef%bc%89/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Wed, 22 Jul 2020 07:05:22 +0000</pubDate>
				<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[自動下單]]></category>
		<guid isPermaLink="false">http://34.96.136.135/?p=678</guid>

					<description><![CDATA[哈囉～好久不見！這篇文章分享如何用python自動下單！
只要用這種方式，不管您是用哪一個券商，相信都能自動下單的！
本文章使用新光證券為範例，其它券商就麻煩大家囉！]]></description>
										<content:encoded><![CDATA[
<p>哈囉～好久不見！這篇文章分享如何用python自動下單！<br>只要用這種方式，不管您是用哪一個券商，相信都能自動下單的！<br>本文章使用新光證券為範例，其它券商就麻煩大家囉！<a href="https://www.finlab.tw/%E9%80%9A%E7%94%A8%E8%87%AA%E5%8B%95%E4%B8%8B%E5%96%AE%E6%B3%95%EF%BC%88%E4%B8%8B%EF%BC%89/thumbnail.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img width="1024" height="512" src="http://34.96.136.135/wp-content/uploads/2020/07/thumbnail-6-1024x512.png" alt="thumbnail 6" class="wp-image-680" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-6-1024x512.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-6-300x150.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-6-768x384.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-6-1536x768.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-6.png 1999w" sizes="(max-width: 1024px) 100vw, 1024px" title="用 Python 超簡單自動下單 1"></figure></div>



<h3 id="不負責聲明">不負責聲明</h3>



<p>本程式僅供教學用，有幾點必須要注意：</p>



<ul><li>萬一新光證券改版，程式會無法使用喔！</li><li>不要在開盤的時候測試，不然就會直接買賣了喔0.0</li><li>在關市時實驗，記得要刪掉委託單喔！</li><li>不要在開盤的時候測試</li><li>不要在開盤的時候測試</li><li>不要在開盤的時候測試(很重要！多加幾行XD)</li></ul>



<h3 id="使用Selenium">使用Selenium</h3>



<p>這是一個網頁自動化工具，通常是拿來測試網頁用，但是拿來下單也可以！<br>我們用它是因為它支援javascript，實做起來就像是按鍵精靈一樣，比較簡單一點！</p>



<p>安裝方法請參考<a href="https://selenium-python.readthedocs.io/installation.html#downloading-python-bindings-for-selenium" rel="noreferrer noopener" target="_blank">Selenium</a></p>



<p>除了<code>pip install selenium</code>以外，還必須要下載driver才行喔！<br>driver 就是一個控制瀏覽器的接口，可以挑chrome、firefox等來用。</p>



<h3 id="自動登入">自動登入</h3>



<p>安裝好了之後，我們先來分析下新光金控的下單流程：</p>



<ol><li>連結到<a href="https://w.sk88.com.tw/Cross/Pc/Login.aspx" rel="noreferrer noopener" target="_blank">新光證券富貴角</a></li><li>輸入帳密</li><li>按「登入」</li></ol>



<p>人工執行很簡單，但是要python執行怎麼寫呢？</p>



<p>首先，雖然人眼看到的是網頁，但程式看到的，都是代碼，<br>所以輸入帳密時，我們必須找出代碼中，對應到帳密的欄位進行填寫，<br>可以對著欄位按右鍵，查找該欄位的ID<a href="https://www.finlab.tw/%E9%80%9A%E7%94%A8%E8%87%AA%E5%8B%95%E4%B8%8B%E5%96%AE%E6%B3%95%EF%BC%88%E4%B8%8B%EF%BC%89/login.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="443" src="http://34.96.136.135/wp-content/uploads/2020/07/login-1024x443.png" alt="login" class="wp-image-681" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/login-1024x443.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/login-300x130.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/login-768x332.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/login-1536x664.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/login.png 1718w" sizes="(max-width: 1024px) 100vw, 1024px" title="用 Python 超簡單自動下單 2"></figure></div>



<p>於是我們就有了第一段程式碼（可以從第30行開始看就好了）：</p>



<pre class="wp-block-code"><code class=""># 1. webdriver: 就是瀏覽器的介面，可以操控瀏覽器
# 2. EC、WebDriverWait：我們可以用WebDriverWait等待EC的條件成立，才執行某些動作
# 3. By：寫條件的時候，用By來獲取網頁上的元素
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

# 用來填寫表單的function
def text_input(driver, idname, text):

    # 確認欄位id存在
    field = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, idname))
    )
    # 清空並填入欄位
    field.clear()
    field.send_keys(text)

# 等 idname 按鈕出現時，按一下
def wait_then_click(driver, idname):

    # 確定按鈕存在
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, idname))
    )
    # 按一下
    element.click()

# 打開瀏覽器，並到登入的網址
driver = webdriver.Firefox(executable_path='你的driver的位置')
driver.get('https://w.sk88.com.tw/Cross/Pc/Login.aspx')

# 填入帳號密碼，按確認
text_input(driver, 'TxtIDNo', '你的帳號')
text_input(driver, 'TxtPass', '你的密碼')
wait_then_click(driver, 'Button1')</code></pre>



<p>第30行才開始執行按鍵精靈的功能，假如前面看不懂就省略吧XD<br>以上代碼和解釋就請大家自行讀取囉！</p>



<h3 id="但事情沒那麼簡單…">但事情沒那麼簡單…</h3>



<p>登入後就看到一行：本機無有效憑證，故無法網路下單，僅提供看盤資訊。<a href="https://www.finlab.tw/%E9%80%9A%E7%94%A8%E8%87%AA%E5%8B%95%E4%B8%8B%E5%96%AE%E6%B3%95%EF%BC%88%E4%B8%8B%EF%BC%89/certificate.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="508" src="http://34.96.136.135/wp-content/uploads/2020/07/certificate-1024x508.png" alt="certificate" class="wp-image-682" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/certificate-1024x508.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/certificate-300x149.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/certificate-768x381.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/certificate.png 1164w" sizes="(max-width: 1024px) 100vw, 1024px" title="用 Python 超簡單自動下單 3"></figure></div>



<p>但我們就是想要網路下單呀！所以，只能來個自動匯入憑證了！</p>



<pre class="wp-block-code"><code class=""># 按一下確定
wait_then_click(driver, 'Button1')

# 匯入憑證（windows裡面的路徑要改成反斜線喔！「C:\hello\something\SKIS_xxx.pfx」之類的）
driver.find_element_by_id("FileUploadCert").send_keys('/Users/放哪都可以/Documents/SKIS_xxx.pfx')
text_input(driver, 'TxtCertPass', '你的密碼')

# 按「確認」
wait_then_click(driver, 'BtnImport')
wait_then_click(driver, "jqismooth_state0_button確　 認")</code></pre>



<p>接下來我們又跳回到登入頁面了，所以再登入一次就可以下單囉！</p>



<pre class="wp-block-code"><code class="">import time
time.sleep(3)
text_input(driver, 'TxtPass', '你的帳號')
text_input(driver, 'TxtIDNo', '你的密碼')
wait_then_click(driver, 'Button1')</code></pre>



<p>為什麼這邊要用<code>time.sleep</code>呢？<br>我也很想避免，但可能是page loading完，有一些javascript要驗證，<br>所以不能太快填寫表單，不然會被清除，加了sleep等待javascript驗證完畢，才能使用，<br>經過了百般折騰，我們終於可以正式的來下單了！</p>



<h3 id="下漲停單">下漲停單</h3>



<p>接下來就來示範漲停單，首先這個頁面，是非常可怕的連環<a href="http://www.w3school.com.cn/html/html_iframe.asp" rel="noreferrer noopener" target="_blank">iframe</a>所包成的<br>什麼是iframe呢？白話來說就是網頁中的網頁，的意思…<br>所以這個下單介面，就是網頁包網頁包網頁，如下圖：<a href="https://www.finlab.tw/%E9%80%9A%E7%94%A8%E8%87%AA%E5%8B%95%E4%B8%8B%E5%96%AE%E6%B3%95%EF%BC%88%E4%B8%8B%EF%BC%89/iframe.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="393" src="http://34.96.136.135/wp-content/uploads/2020/07/iframe-1024x393.png" alt="iframe" class="wp-image-683" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/iframe-1024x393.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/iframe-300x115.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/iframe-768x295.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/iframe-1536x589.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/iframe.png 1575w" sizes="(max-width: 1024px) 100vw, 1024px" title="用 Python 超簡單自動下單 4"></figure></div>



<p>我們必須再深入兩層iframe，才能到達下單的真正網頁：</p>



<pre class="wp-block-code"><code class="">driver.switch_to_default_content()

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "Content")))
driver.switch_to.frame('Content')

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "OrderPanel")))
driver.switch_to.frame('OrderPanel')</code></pre>



<p>接下來就可以利用這個iframe下單了，總共有七個步驟，以漲停買入為例，如下圖：<a href="https://www.finlab.tw/%E9%80%9A%E7%94%A8%E8%87%AA%E5%8B%95%E4%B8%8B%E5%96%AE%E6%B3%95%EF%BC%88%E4%B8%8B%EF%BC%89/order.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="329" src="http://34.96.136.135/wp-content/uploads/2020/07/order-1024x329.png" alt="order" class="wp-image-684" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/order-1024x329.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/order-300x96.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/order-768x247.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/order-1536x493.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/order.png 2008w" sizes="(max-width: 1024px) 100vw, 1024px" title="用 Python 超簡單自動下單 5"></figure></div>



<p>這邊要注意第三跟五的步驟，我們要等待特定的事件發生，才能繼續進行喔！<br>因為這關係到網頁與新光證券的伺服器中間的認證，沒有等待就下不了單喔！</p>



<p>接下來就把這七個步驟寫成代碼：</p>



<pre class="wp-block-code"><code class="">stock_id = '2330'
bs = 'buy'
amount = 1

# 第一步驟
text_input(driver, 'TxtSymb', stock_id)

# 第二步驟
btnbs_xpath = "//span[@id='RdoOrls']/label/span" if bs == 'buy' else "//span[@id='RdoOrls']/label[2]/span"
driver.find_element_by_xpath(btnbs_xpath).click()

# 第三步驟
if bs == 'buy':
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//body[@style='background: rgb(255, 192, 203) none repeat scroll 0% 0%;']")))
else:
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//body[@style='background: rgb(167, 217, 254) none repeat scroll 0% 0%;']")))

# 第四步驟
btnlimit_xpath = "//span[@id='RdoOrpt']/label[2]/span" if bs == 'buy' else "//span[@id='RdoOrpt']/label[4]/span"
driver.find_element_by_xpath(btnlimit_xpath).click()

# 第五步驟
if bs == 'buy':
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@id = "TxtOrpr" and @value = "漲停價"]')))
else:
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//input[@id = "TxtOrpr" and @value = "跌停價"]')))

# 第六步驟
text_input(driver, 'TxtOrsh', str(amount))

# 第七步驟
driver.execute_script('QueryConfirm()')
wait_then_click(driver, 'jqismooth_state0_button確　 認')
wait_then_click(driver, 'jqismooth_state0_button離　 開')</code></pre>



<p>這邊我有用一些xpath的方式，來查找一些按鈕，可以參考<a href="https://zh.wikibooks.org/zh-hant/XML/XPath" rel="noreferrer noopener" target="_blank">xpath教學</a><br>假如已經事先登入，執行這7個步驟，大約落在3秒左右，應該還算是堪用，<br>但以上範例都是用漲停或是跌停買賣，而且我真的沒有在盤中使用過，還請小心服用！</p>



<p>以上就是盤中買賣<strong>不負責</strong>教學！不知道大家有什麼建議呢？</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/%e9%80%9a%e7%94%a8%e8%87%aa%e5%8b%95%e4%b8%8b%e5%96%ae%e6%b3%95%ef%bc%88%e4%b8%8b%ef%bc%89/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">678</post-id>	</item>
		<item>
		<title>自動下單(Part 1)：用Python爬取交易記錄</title>
		<link>https://www.finlab.tw/%e7%94%a8python%e7%8d%b2%e5%8f%96%e6%8c%81%e8%82%a1%e6%90%8d%e7%9b%8a%e8%a1%a8/</link>
					<comments>https://www.finlab.tw/%e7%94%a8python%e7%8d%b2%e5%8f%96%e6%8c%81%e8%82%a1%e6%90%8d%e7%9b%8a%e8%a1%a8/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Wed, 22 Jul 2020 07:05:02 +0000</pubDate>
				<category><![CDATA[財經PYTHON教學]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[爬蟲]]></category>
		<category><![CDATA[程式交易]]></category>
		<category><![CDATA[自動下單]]></category>
		<guid isPermaLink="false">http://34.96.136.135/?p=604</guid>

					<description><![CDATA[量化投資原來分為以下兩個步驟：

1. 用數學模型，運算出買賣股票清單
2. 清單自動與看盤軟體對接，實現自動買賣
今天就教你怎麼將自己的帳戶與python做連接，讓電腦得知你實際持股的部位。]]></description>
										<content:encoded><![CDATA[
<p>量化投資原來分為以下兩個步驟：</p>



<ol><li>用數學模型，運算出買賣股票清單</li><li>清單自動與看盤軟體對接，實現自動買賣</li></ol>



<p>今天就教你怎麼將自己的帳戶與python做連接，讓電腦得知你實際持股的部位。<a href="https://www.finlab.tw/%E7%94%A8python%E7%8D%B2%E5%8F%96%E6%8C%81%E8%82%A1%E6%90%8D%E7%9B%8A%E8%A1%A8/thumbnail.jpeg"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="289" height="175" src="http://34.96.136.135/wp-content/uploads/2020/07/thumbnail-3-1.jpeg" alt="thumbnail 3 1" class="wp-image-605" title="自動下單(Part 1)：用Python爬取交易記錄 6"></figure></div>



<h3 id="打開券商看盤軟體（網站）">打開券商看盤軟體（網站）</h3>



<p>首先，我們針對新光證券來進行對接，其它證券的朋友就不好意思了，我只有新光XDD，但每一家的網站設計不會差太多，可以舉一反三，做出其它證券的對接系統。</p>



<p>雖然我是新光的用戶，但新光的網站真的很瞎！介面老舊不說，每天早上9點開盤必當機…好在我都是直接下開盤漲停買入，我是可憐窮散戶金額小所以沒差XDD。</p>



<h3 id="打開網頁，監控network">打開網頁，監控network</h3>



<p>接下來我們要來查看登入機制是如何運作的，知道了內部的機制，才能用python來模擬登入的動作喔！</p>



<ol><li>用無痕視窗<a href="https://w.sk88.com.tw/Cross/Pc/Login.aspx" rel="noreferrer noopener" target="_blank">登入頁面</a></li><li>對著網頁任何一處按右鍵，選擇inspect（中文忘記是什麼了，反正就是最下方那個XD）</li><li>選擇network（一樣請自己對照中文）</li></ol>



<p>做完這三步驟你應該會看到以下節圖：<a href="https://www.finlab.tw/%E7%94%A8python%E7%8D%B2%E5%8F%96%E6%8C%81%E8%82%A1%E6%90%8D%E7%9B%8A%E8%A1%A8/1.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="507" src="http://34.96.136.135/wp-content/uploads/2020/07/1-1024x507.png" alt="1" class="wp-image-606" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/1-1024x507.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/1-300x148.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/1-768x380.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/1.png 1433w" sizes="(max-width: 1024px) 100vw, 1024px" title="自動下單(Part 1)：用Python爬取交易記錄 7"></figure></div>



<h1 id="這個-Network-列表是做什麼的？">這個 Network 列表是做什麼的？</h1>



<p>network這個列表，最主要就是會紀錄網頁所用到的 get 跟 post 的請求，什麼是 get 跟 post 呢？籠統的說，這些就是你的瀏覽器跟網站主機互動時的通信方式，平常瀏覽網頁，將網頁從網路上下載到瀏覽器中，這個動作通常是用get，而隱私性比較高的（登入、修改網路上的資料），就會用 post。</p>



<p>輸入你的帳號密碼按下登入，你會看到network的列表出現了很多東西，大部分的都不重要，請點選其中的 Login.aspx，裡面紀錄著用來登入的通訊過程。<a href="https://www.finlab.tw/%E7%94%A8python%E7%8D%B2%E5%8F%96%E6%8C%81%E8%82%A1%E6%90%8D%E7%9B%8A%E8%A1%A8/2.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="875" height="397" src="http://34.96.136.135/wp-content/uploads/2020/07/2.png" alt="2" class="wp-image-607" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/2.png 875w, https://www.finlab.tw/wp-content/uploads/2020/07/2-300x136.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/2-768x348.png 768w" sizes="(max-width: 875px) 100vw, 875px" title="自動下單(Part 1)：用Python爬取交易記錄 8"></figure></div>



<p>你應該會看到以上的節圖，裡面有些重要的資訊，我們先把登入當作是一封寫給新光主機的信，上圖中包含了幾個重要的資訊：</p>



<ol><li>信寄到：<a href="https://w.sk88.com.tw/Cross/Pc/Login.aspx" rel="noreferrer noopener" target="_blank">https://w.sk88.com.tw/Cross/Pc/Login.aspx</a>&nbsp;這個地方</li><li>這是一個 POST request</li><li>server 回覆代號是 302 （通常是2XX、或3XX。4XX、5XX代表有問題）</li></ol>



<h3 id="查看-Request-內容">查看 Request 內容</h3>



<p>目前知道的訊息有：信的種類為 post，而地址也有了。但信中的內容要寫什麼呢？無非就是跟登入有關的訊息吧！例如帳號密碼之類的，所以我們將視窗往下拉，看到form data這裡：<a href="https://www.finlab.tw/%E7%94%A8python%E7%8D%B2%E5%8F%96%E6%8C%81%E8%82%A1%E6%90%8D%E7%9B%8A%E8%A1%A8/3.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="936" height="604" src="http://34.96.136.135/wp-content/uploads/2020/07/3.png" alt="3" class="wp-image-608" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/3.png 936w, https://www.finlab.tw/wp-content/uploads/2020/07/3-300x194.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/3-768x496.png 768w" sizes="(max-width: 936px) 100vw, 936px" title="自動下單(Part 1)：用Python爬取交易記錄 9"></figure></div>



<p>你可以看到信封裡的內容：</p>



<ol><li>__EVENTTARGET: 欄位為空</li><li>__EVENTARGUMENT: 欄位為空</li><li>__VIEWSTATE: 亂碼</li><li>__VIEWSTATEGENERATOR: 亂碼</li><li>__EVENTVALIDATION: 亂碼</li><li>TxtIDNo: 你的身份證字號,</li><li>TxtPass: 你的密碼,</li><li>HiddenIDNo: 你的生份正字號,</li><li>Button1: 登入,</li></ol>



<p>我們可以發現除了帳號密碼外，還有很多怪東西，例如：「__EVENTTARGET」等等，這些東西我們不能亂填，我們得找到這些欄位的正確內容，登入才會生效。<br>我們可以到原本的登入網頁找：</p>



<ol><li>回到登入頁面（inspect依然開啟）</li><li>點選 inspect 中的 Element，打開網站的原始碼，並搜尋（Ctrl-F 或 Cmd-F），’__VIEWSTATE’，就可以找到一它的value是多少了！</li><li>其它如「<code>__EVENTARGUMENT</code>」、「<code>__VIEWSTATE</code>」、「<code>__VIEWSTATEGENERATOR</code>」、「<code>__EVENTVALIDATION</code>」也是用一樣的方式找</li></ol>



<p>以下是節圖：<a href="https://www.finlab.tw/%E7%94%A8python%E7%8D%B2%E5%8F%96%E6%8C%81%E8%82%A1%E6%90%8D%E7%9B%8A%E8%A1%A8/4.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="668" src="http://34.96.136.135/wp-content/uploads/2020/07/4-1024x668.png" alt="4" class="wp-image-609" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/4-1024x668.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/4-300x196.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/4-768x501.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/4.png 1055w" sizes="(max-width: 1024px) 100vw, 1024px" title="自動下單(Part 1)：用Python爬取交易記錄 10"></figure></div>



<p>當然自己慢慢輸入肯定很蠢，所以這一切都要用python自動化才行！<br>以後真的只要1秒就可以下載好，省去網站慢吞吞填入帳密。。。</p>



<h3 id="寫code時間">寫code時間</h3>



<p>所以你已經瞭解了原理了，接下來就是實做！<br>首先，我們要得到網頁，找尋當中的「__VIEWSTATE」等驗證碼：<br>得到網頁、驗證碼</p>



<pre class="wp-block-code"><code class="">import re
import requests
import pandas as pd
from io import StringIO

# 開啟瀏覽器
ses = requests.Session()

# 打開登入網頁
d = ses.get('https://w.sk88.com.tw/Cross/Pc/Login.aspx')

# 此函式會找特定的value，如「__VIEWSTATE」等
def find_value(name, web):
    reg = 'name="' + name + '".+value="(.*)" />'
    pattern = re.compile(reg)
    result  = pattern.findall(web.text)
    try:
        return result[0]
    except:
        return ""

# 使用方式
find_value('__VIEWSTATE', d)</code></pre>



<p>我特別寫好了一個&nbsp;<code>find_value</code>&nbsp;的函式，它會幫你找出網頁中的怪碼，大家有興趣可以去研究&nbsp;<a href="https://webber-pypyso.blogspot.fr/2011/02/10-1-1.html" rel="noreferrer noopener" target="_blank">regex</a>&nbsp;，用來解析字串用的。<a href="https://www.finlab.tw/%E7%94%A8python%E7%8D%B2%E5%8F%96%E6%8C%81%E8%82%A1%E6%90%8D%E7%9B%8A%E8%A1%A8/find_value.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="121" src="http://34.96.136.135/wp-content/uploads/2020/07/find_value-1024x121.png" alt="find value" class="wp-image-610" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/find_value-1024x121.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/find_value-300x35.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/find_value-768x91.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/find_value.png 1119w" sizes="(max-width: 1024px) 100vw, 1024px" title="自動下單(Part 1)：用Python爬取交易記錄 11"></figure></div>



<p>於是<code>__VIEWSTATEGENERATOR</code>、&nbsp;<code>__EVENTVALIDATION</code>，這些怪東西的驗證碼就被找到了！</p>



<h3 id="寫信封的內容">寫信封的內容</h3>



<p>接下來我們再來實際的登入：</p>



<p>用python模擬登入</p>



<pre class="wp-block-code"><code class="">data = {
    '__EVENTTARGET': find_value('__EVENTTARGET', d),
    '__EVENTARGUMENT': find_value('__EVENTARGUMENT', d),
    '__VIEWSTATE': find_value('__VIEWSTATE', d),
    '__VIEWSTATEGENERATOR': find_value('__VIEWSTATEGENERATOR', d),
    '__EVENTVALIDATION': find_value('__EVENTVALIDATION', d),
    'TxtIDNo':'你的身份證字號（帳號）',
    'TxtPass':'密碼',
    'HiddenIDNo':'你的身份證字號（帳號）',
    'Button1':'登入',
}

login = ses.post('https://w.sk88.com.tw/Cross/Pc/Login.aspx', data=data)</code></pre>



<p>以上的code，就是創建信封的內容 data，並發送「POST」，請求登入。記得要修改改帳號密碼才能用喔！</p>



<h3 id="下載持股部位">下載持股部位</h3>



<p>接下來，由於已經登入了，我們就去相對應的網址，下載自己的持股部位：<br>下載持股部位</p>



<pre class="wp-block-code"><code class="">
# 下載持股
data = ses.get('https://w.sk88.com.tw/Cross/Pc/QueryPositionRealTime.aspx')
data.encoding = 'utf-8'

# 用 pandas 整理
df = pd.read_html(StringIO(data.text))[0]

# 設定第一行row 為 欄位名稱
df.columns = df.iloc[0]

# 刪除第一行row
df = df.iloc[1:]
df</code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="337" src="http://34.96.136.135/wp-content/uploads/2020/07/df-1-1024x337.png" alt="df 1" class="wp-image-611" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/df-1-1024x337.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/df-1-300x99.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/df-1-768x253.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/df-1.png 1117w" sizes="(max-width: 1024px) 100vw, 1024px" title="自動下單(Part 1)：用Python爬取交易記錄 12"></figure></div>



<p><a href="https://www.finlab.tw/%E7%94%A8python%E7%8D%B2%E5%8F%96%E6%8C%81%E8%82%A1%E6%90%8D%E7%9B%8A%E8%A1%A8/df.png"></a></p>



<p>以上是我的持股記錄，趁最近表現不錯放一下XDD，這只是表面績效很好，實際上沒那麼好，因為最近賣了很多虧損股，只剩好的股票，所以才看起來光鮮亮麗。絕對不能只看持股獲利，還必須考慮銀行帳戶中的存款才行喔！不然很有可能發現，持股獲利很高，但帳戶餘額慢慢變少的情況喔！</p>



<p>以上就是今天的教學，有以下幾個小重點：</p>



<ol><li>學習用chrome來找 get post 的方法</li><li>利用python 模擬登入帳號</li><li>下載自己的持股狀況</li></ol>



<p>下次會介紹如何串接自動化買賣，敬請期待！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/%e7%94%a8python%e7%8d%b2%e5%8f%96%e6%8c%81%e8%82%a1%e6%90%8d%e7%9b%8a%e8%a1%a8/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">604</post-id>	</item>
		<item>
		<title>每天只要15分鐘 &#8211; 超簡單學會 Python 自動化貨投資比特幣</title>
		<link>https://www.finlab.tw/btc-summary/</link>
					<comments>https://www.finlab.tw/btc-summary/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Tue, 21 Jul 2020 04:02:00 +0000</pubDate>
				<category><![CDATA[加密貨幣]]></category>
		<category><![CDATA[BTC]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[比特幣]]></category>
		<category><![CDATA[自動下單]]></category>
		<guid isPermaLink="false">http://34.96.136.135/?p=1133</guid>

					<description><![CDATA[2017年12月，比特幣曾一天上漲20％！我的朋友說，他投資了加密貨幣，但過了一個禮拜，比特幣的價格開始崩盤，而他卻買在高點，我就在想，有沒有一種投資方法，可以自動化投資加密貨幣，卻不用承受這麼高的風險？於是開始研究基於加密貨幣的量化投資，寫成一系列的文章，共12篇分享給大家！]]></description>
										<content:encoded><![CDATA[
<p>2017年12月，比特幣曾一天上漲20％！<br>我的朋友說，他投資了加密貨幣，<br>但過了一個禮拜，比特幣的價格開始崩盤，而他卻買在高點，</p>



<p>我就在想，有沒有一種投資方法，<br>可以自動化投資加密貨幣，卻不用承受這麼高的風險？<br>於是開始研究基於加密貨幣的量化投資，<br>寫成一系列的文章，共12篇，一篇只需要操作 15 分鐘，<br>分享給大家！<a href="https://www.finlab.tw/btc-summary/summary.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="453" src="http://34.96.136.135/wp-content/uploads/2020/07/summary-1-1024x453.png" alt="summary 1" class="wp-image-1134" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/summary-1-1024x453.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/summary-1-300x133.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/summary-1-768x340.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/summary-1-1536x679.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/summary-1.png 1624w" sizes="(max-width: 1024px) 100vw, 1024px" title="每天只要15分鐘 - 超簡單學會 Python 自動化貨投資比特幣 13"></figure></div>



<h3 id="為什麼要投資加密貨幣">為什麼要投資加密貨幣</h3>



<p>加密貨幣當前是個小眾市場，但是有很大的潛力<br>從貨幣供給、基本面的角度，加密貨幣也是非常有市場的<br>是值得投資的商品</p>



<p>德意志交易所（Deutsche Bórse）<br>這個月發行了 BTC-E<br>是由 100% BTC 支持的<br>代表每個德國人，都可以從股票帳戶購買 BTC！</p>



<p>當初被世界各國禁止，<br>現在反而是逐漸開放，<br>從期貨、現貨等，進入人們的日常，<br>你還覺得加密貨幣沒有未來嗎？</p>



<p><a href="https://www.finlab.tw/python-bitcoin-trading-why-bitcoin/">前導：（Python x Crypto (Part 1)：為什麼是比特幣？）</a></p>



<p>然而投資跟投機往往一線之間，<br>像是比特幣<br>波動就非常大！<br>所以持有時加密貨幣一定要</p>



<ul><li>少部位</li><li>用量化分析降低風險</li></ul>



<h3 id="買入時機：-Miner-Capitulation-指標">買入時機： Miner Capitulation 指標</h3>



<p>長期投資，究竟要怎麼投資比特幣？<br>可以參考一個很有用的指標，<br>不過這個指標的原理，比較複雜，<br>需要兩篇的時間慢慢解說：</p>



<ul><li><a href="https://www.finlab.tw/best-indicator-bitcoin/">用Python投資加密貨幣：比特幣操作最強指標(原理篇)</a></li><li><a href="https://www.finlab.tw/btc-tradingview-intro/">用Python投資加密貨幣：比特幣操作最強指標(技術篇)</a></li></ul>



<p>學完後，你就可以製作出下面這種專業的操盤工具喔！<a href="https://www.finlab.tw/btc-summary/ind.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="485" src="http://34.96.136.135/wp-content/uploads/2020/07/ind-2-1-1024x485.png" alt="ind 2 1" class="wp-image-1136" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/ind-2-1-1024x485.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/ind-2-1-300x142.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/ind-2-1-768x364.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/ind-2-1-1536x728.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/ind-2-1-2048x970.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="每天只要15分鐘 - 超簡單學會 Python 自動化貨投資比特幣 14"></figure></div>



<p>上述指標<br>在歷史上看來很準確<br>但是可以投資的時機真的太少了<br>畢竟比特幣的上漲跟下跌週期非常長</p>



<p>要怎麼樣可以安穩的投資加密貨幣呢？<br>我們可以用量化投資的方式，<br>只要重複做簡單的操作<br>就可以有效控制風險！</p>



<h3 id="用-Python-做量化投資">用 Python 做自動化投資（量化投資）</h3>



<p>要打造一個可用的交易策略，<br>可以參考下方的文章<br>每一步程式碼都可以在&nbsp;<a href="https://colab.research.google.com/" rel="noreferrer noopener" target="_blank">Colab</a>&nbsp;線上執行<br>不需要安裝和設定 Python 環境，<br>你可以現在就跟我們一起<br>來做量化投資的實驗喔！</p>



<ol><li>獲得歷史數據：<a href="https://www.finlab.tw/btc-crawler-py/">加密貨幣爬蟲撰寫</a></li><li>找出交易訊號：<a href="https://www.finlab.tw/btc-trading-signal/">交易策略訊號實做</a></li><li>模擬回測績效：<a href="https://www.finlab.tw/btc-simple-sma-backtesting/">實做回測績效驗證</a></li><li>策略參數優化：<a href="https://www.finlab.tw/btc-backtesting-optimization/">二十倍的策略優化</a></li></ol>



<p>學完上方單元，就能做出歷史績效高達20倍的比特幣交易策略喔！<a href="https://www.finlab.tw/btc-summary/after.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="737" src="http://34.96.136.135/wp-content/uploads/2020/07/after-1-2-1024x737.png" alt="after 1 2" class="wp-image-1138" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/after-1-2-1024x737.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/after-1-2-300x216.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/after-1-2-768x553.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/after-1-2-1536x1105.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/after-1-2.png 1932w" sizes="(max-width: 1024px) 100vw, 1024px" title="每天只要15分鐘 - 超簡單學會 Python 自動化貨投資比特幣 15"></figure></div>



<p>有了以上的研究，<br>再加上你自己的創意，<br>不斷的嘗試，<br>就會有底氣，<br>可以買入人生第一枚加密貨幣了！</p>



<h3 id="加密貨幣入金">加密貨幣入金</h3>



<p>然而，究竟要怎麼買？買多少？這篇文章告訴你：</p>



<ul><li><a href="https://www.finlab.tw/btc-deposit-how/">如何投資加密貨幣</a></li><li><a href="https://www.finlab.tw/btc-deposit-ways/">加密貨幣入金</a></li></ul>



<p>上面的文章總結，<br>我們可以有兩種投資的方法：</p>



<ol><li>小額長線投資</li><li>量化策略投資</li></ol>



<p>其中，量化投資需要有紀律的操作，<br>但是，萬一訊號出現在午夜，<br>難道我們要熬夜操做嗎？<br>也太累了吧？！</p>



<p>所以我們也額外教大家<br>怎麼做一個全自動化的策略<br>我們是利用&nbsp;<a href="https://aws.amazon.com/" rel="noreferrer noopener" target="_blank">Amazon Web Service （AWS）</a><br>裡面的 Lambda 功能<br>來自動監控策略，<br>決定買入賣出的喔！</p>



<h3 id="策略雲端交易">策略雲端交易</h3>



<p>使用 AWS Lambda 的好處<br>就是在每個月提供 400,000 GB-seconds 的額度<br>照著下方的教學，基本上不太會超額<br>讓你雲端<strong>免費</strong>自動下單交易！</p>



<ul><li><a href="https://www.finlab.tw/aws-lambda-initial-setup/">基本功能：AWS 簡易架設</a></li><li><a href="https://www.finlab.tw/btc-aws-lambda-signal-update/">用 AWS 算出策略多空</a></li><li><a href="https://www.finlab.tw/btc-aws-signal-trigger-condition/">AWS 手機監控與雲端下單</a></li></ul>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="978" height="636" src="http://34.96.136.135/wp-content/uploads/2020/07/thumbnail-6-8.png" alt="thumbnail 6 8" class="wp-image-1140" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-6-8.png 978w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-6-8-300x195.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-6-8-768x499.png 768w" sizes="(max-width: 978px) 100vw, 978px" title="每天只要15分鐘 - 超簡單學會 Python 自動化貨投資比特幣 16"></figure></div>



<p><a href="https://www.finlab.tw/btc-summary/cloud.png"></a></p>



<p>有了雲端的自動執行策略，<br>就可以讓你 忘記交易<br>直到某一天 突然想起<br>打開手機，發現帳戶資產多了個零！（為了押韻，純屬效果XD）</p>



<h3 id="用最科學的方式，投資最先進的貨幣">用最科學的方式，投資最先進的貨幣</h3>



<p>加密貨幣是體制上的顛覆，<br>加密貨幣之於傳統貨幣，就像是Uber之於計程車行一樣，<br>引入新的科技，必然會有一些配套措施來不及因應（詐騙、價格波動），<br>也會引來舊有制度的既得利益者反感。</p>



<p>加密貨幣的發展有些顛頗，<br>但長期來說，整個世代會朝著先進、便利的方向發展。<br>或許一百年後的未來，大家會嘲笑現在的金融體制怎麼這麼不方便呢！</p>



<p>FinLab 的目標，就是<br>希望可以在量化投資的路上，當大家的「武器製造商」！<br>就讓我們一起用 Python 勇闖未來吧！</p>



<p>如果喜歡我們的文章，也歡迎參考我們最新募資的線上課程「<a rel="noreferrer noopener" href="https://hahow.in/cr/crypto-python" target="_blank">用 Python 理財：打造加密貨幣實戰策略</a>」，在線上課程中，我們會更有系統、更完整地教您如何從無到有，打造10種加密貨幣實戰策略，並且能夠自動化雲端交易！有興趣的話，可以<a rel="noreferrer noopener" href="https://hahow.in/cr/crypto-python" target="_blank">點此觀看課程介紹影片</a>喔！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/btc-summary/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1133</post-id>	</item>
		<item>
		<title>用Python投資加密貨幣：手機監控與自動下單 (Part 12)</title>
		<link>https://www.finlab.tw/btc-aws-signal-trigger-condition/</link>
					<comments>https://www.finlab.tw/btc-aws-signal-trigger-condition/#respond</comments>
		
		<dc:creator><![CDATA[FinLab - 韓承佑]]></dc:creator>
		<pubDate>Mon, 20 Jul 2020 12:02:48 +0000</pubDate>
				<category><![CDATA[加密貨幣]]></category>
		<category><![CDATA[BTC]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[比特幣]]></category>
		<category><![CDATA[自動下單]]></category>
		<guid isPermaLink="false">http://34.96.136.135/?p=1107</guid>

					<description><![CDATA[我們上次已經寫好了「核心」程式，但什麼時候，才能執行這些程式呢？總共有兩種方式啟動程式：一種是連上網監控，另一種是時間間格、自動下單（每4小時）！]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="978" height="636" src="http://34.96.136.135/wp-content/uploads/2020/07/thumbnail-6-6.png" alt="thumbnail 6 6" class="wp-image-1109" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-6-6.png 978w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-6-6-300x195.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/thumbnail-6-6-768x499.png 768w" sizes="(max-width: 978px) 100vw, 978px" title="用Python投資加密貨幣：手機監控與自動下單 (Part 12) 17"></figure></div>



<p>我們上次已經寫好了「核心」程式，但什麼時候，才能執行這些程式呢？總共有兩種方式啟動程式：</p>



<ol><li>一種是連上網監控</li><li>另一種是時間間格、自動下單（每4小時）</li></ol>



<h3 id="1-連上網監控">1. 連上網監控</h3>



<p>我們可以用「新增觸發條件」來觸發，並且點選「API Gateway」：</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="463" src="http://34.96.136.135/wp-content/uploads/2020/07/selectTrigger-1-1024x463.png" alt="selectTrigger 1" class="wp-image-1111" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/selectTrigger-1-1024x463.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/selectTrigger-1-300x136.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/selectTrigger-1-768x347.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/selectTrigger-1-1536x694.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/selectTrigger-1-2048x925.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="用Python投資加密貨幣：手機監控與自動下單 (Part 12) 18"></figure></div>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="894" src="http://34.96.136.135/wp-content/uploads/2020/07/createGateway-1-1024x894.png" alt="createGateway 1" class="wp-image-1113" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/createGateway-1-1024x894.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/createGateway-1-300x262.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/createGateway-1-768x671.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/createGateway-1-1536x1341.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/createGateway-1.png 1640w" sizes="(max-width: 1024px) 100vw, 1024px" title="用Python投資加密貨幣：手機監控與自動下單 (Part 12) 19"></figure></div>



<p>最後會給你一個網址，用任何手機、筆電 連進去就可以了！<br><a href="https://www.finlab.tw/btc-aws-signal-trigger-condition/triggerUrl.png"></a><br><a href="https://www.finlab.tw/btc-aws-signal-trigger-condition/results.png"></a></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="527" src="http://34.96.136.135/wp-content/uploads/2020/07/triggerUrl-1-1024x527.png" alt="triggerUrl 1" class="wp-image-1115" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/triggerUrl-1-1024x527.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/triggerUrl-1-300x154.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/triggerUrl-1-768x395.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/triggerUrl-1-1536x790.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/triggerUrl-1-2048x1053.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="用Python投資加密貨幣：手機監控與自動下單 (Part 12) 20"></figure></div>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="256" src="http://34.96.136.135/wp-content/uploads/2020/07/results-1024x256.png" alt="results" class="wp-image-1116" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/results-1024x256.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/results-300x75.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/results-768x192.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/results.png 1486w" sizes="(max-width: 1024px) 100vw, 1024px" title="用Python投資加密貨幣：手機監控與自動下單 (Part 12) 21"></figure></div>



<h3 id="2-時間間格、自動下單">2. 時間間格、自動下單</h3>



<p>首先我們先將原本的 API Gateway 刪除，然後再增加新的 Trigger：每4小時執行一次！</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="751" src="http://34.96.136.135/wp-content/uploads/2020/07/addcron-1-1024x751.png" alt="addcron 1" class="wp-image-1118" srcset="https://www.finlab.tw/wp-content/uploads/2020/07/addcron-1-1024x751.png 1024w, https://www.finlab.tw/wp-content/uploads/2020/07/addcron-1-300x220.png 300w, https://www.finlab.tw/wp-content/uploads/2020/07/addcron-1-768x563.png 768w, https://www.finlab.tw/wp-content/uploads/2020/07/addcron-1-1536x1126.png 1536w, https://www.finlab.tw/wp-content/uploads/2020/07/addcron-1-2048x1502.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" title="用Python投資加密貨幣：手機監控與自動下單 (Part 12) 22"></figure></div>



<p>這樣就會四小時執行一次了！</p>



<p>假如我們希望它四小時判斷多空與下單，可以將上一個單元的範例，做以下的修改：</p>



<ol><li>新增 client 使用金鑰登入（可以到&nbsp;<a href="https://www.binance.com/tw/" rel="noreferrer noopener" target="_blank">Binance</a>&nbsp;申請）</li><li>做多時，要買入「BTCUSDT」</li><li>做空時，賣出「BTCUSDT」</li></ol>



<p>以下的範例，在做空時，我們只單純的賣出，而不額外做空，因為我們現在是用現貨且無槓桿的交易帳戶，所以沒有辦法做空喔！<br>假如想要做BTC期貨，也可以參考<a rel="noreferrer noopener" href="https://python-binance.readthedocs.io/en/latest/margin.html" target="_blank">官方的Margin Trading End Point</a></p>



<p>以下就是現貨範例：</p>



<pre class="wp-block-code"><code lang="python" class="language-python line-numbers">import json
from binance.client import Client

def lambda_handler(event, context):
    
    ##########
    # Login #
    ##########
    
    # before:
    # client = Client()
    
    # after:
    PUBLIC = '&lt;YOUR-PUBLIC-KEY>'
    SECRET = '&lt;YOUR-SECRET-KEY>'
    QUANTITY = 0.0001

    client = Client(api_key=PUBLIC, api_secret=SECRET)
    
    ###################
    # historical data #
    ###################
    
    klines = client.get_historical_klines("BTCUSDT", Client.KLINE_INTERVAL_4HOUR, "two week ago")
    
    def sma(n):
        return sum([float(k[4]) for k in klines[-n-1:-1]])/n
    
    def prev_sma(n):
        return sum([float(k[4]) for k in klines[-n-2:-2]])/n
    
    sma60 = sma(65)
    sma5 = sma(5)
    
    psma60 = prev_sma(65)
    psma5 = prev_sma(5)

    ###################
    #      Trade      #
    ###################
    
    ret = ''
    
    if sma5 > sma60 and psma5 &lt; psma60:
        ret = 'long'
        order = client.order_market_buy(
            symbol='BTCUSDT',
            quantity=QUANTITY)
        
    if sma5 &lt; sma60 and psma5 > psma60:
        ret = 'short'
        order = client.order_market_sell(
            symbol='BTCUSDT',
            quantity=QUANTITY)
        
    if sma5 &lt; sma60 and psma5 &lt; psma60:
        ret = 'hold short'
    
    if sma5 > sma60 and psma5 > psma60:
        ret = 'hold long'

    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('btc-trading-signal: ' + ret)
    }</code></pre>



<p>經過這12個單元，相信大家對於加密貨幣量化交易有初步的理解，大概瞭解如何建構一個自動化的交易系統！</p>



<p>你會發現，手刻一個交易系統，其實沒有很難，難的在於，如何「系統化」的建立一個多元的交易策略，研發多個策略 並統整起來，考驗大家撰寫策略、系統化的能力！</p>



<p>怕輸太多錢嗎？沒關係，因為加密貨幣可以切割至 10 的 8 次方！就算你有一百種不同的策略，也可以用300元台幣順利分散風險喔！所以不要再猶豫了，趕快來試試看吧！</p>



<p>如果喜歡我們的文章，也歡迎參考我們最新募資的線上課程「<a rel="noreferrer noopener" href="https://hahow.in/cr/crypto-python" target="_blank">用 Python 理財：打造加密貨幣實戰策略</a>」，在線上課程中，我們會更有系統、更完整地教您如何從無到有，打造10種加密貨幣實戰策略，並且能夠自動化雲端交易！有興趣的話，可以<a rel="noreferrer noopener" href="https://hahow.in/cr/crypto-python" target="_blank">點此觀看課程介紹影片</a>喔！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.finlab.tw/btc-aws-signal-trigger-condition/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1107</post-id>	</item>
	</channel>
</rss>
