{"cells": [{"metadata": {"trusted": true}, "cell_type": "code", "source": "'''\nstart: 2020-01-01 00:00:00\nend: 2021-03-11 00:00:00\nperiod: 4h\nexchanges: [{\"eid\":\"Binance\",\"currency\":\"BTC_USDT\",\"stocks\":0}]\n'''\n#\u4e0a\u9762\u6ce8\u91ca\u662f\u56de\u6d4b\u8bbe\u7f6e\nimport numpy as np\nimport pandas as pd\nimport matplotlib \nimport matplotlib.pyplot as plt\n\nfrom fmz import * # \u5bfc\u5165\u6240\u6709FMZ\u51fd\u6570\ntask = VCtx(__doc__) # \u521d\u59cb\u5316", "execution_count": 1, "outputs": []}, {"metadata": {"trusted": true}, "cell_type": "code", "source": "code='BTC_USDT'\nlength = 7 #\u7528\u4e8e\u786e\u5b9a\u8ba1\u7b97\u6807\u51c6\u5dee\u53ca\u79fb\u52a8\u5e73\u5747\u7684\u5468\u671f\nopen_trigger = 0.2 #\u4ef7\u683c\u5411\u4e0a\u504f\u79fb\u5747\u7ebf0.5\u500d\u89c2\u5bdf\u671f\u5185\u6807\u51c6\u5dee\u7684\u6700\u5927\u503c\nstopwin_trigger = 2.5 #\u4ef7\u683c\u5411\u4e0a\u504f\u79fb\u5747\u7ebf3\u500d\u89c2\u5bdf\u671f\u5185\u7684\u6807\u51c6\u5dee\u6700\u5927\u503c\u6b62\u76c8\nstoplose_trigger = 1 #\u79fb\u52a8\u6b62\u635f\uff0c\u8dcc\u7834\u5747\u503c\u79fb\u52a8\u6b62\u635f\uff0c\u56fa\u5b9a\u6b62\u635f\uff0c\u5f00\u4ed3\u4ef7\u5411\u4e0b\u504f\u79fb\u89c2\u5bdf\u671f\u5185\u6807\u51c6\u5dee\u7684\u6700\u5927\u503c", "execution_count": 212, "outputs": []}, {"metadata": {"trusted": true}, "cell_type": "code", "source": "data = get_bars('bitfinex.btc_usd', '1d', start='2020-01-01', end='2021-03-01')\ndata.reset_index(inplace=True)\ndata", "execution_count": 213, "outputs": [{"output_type": "execute_result", "execution_count": 213, "data": {"text/plain": " index open high low \\\n0 2020-01-01 08:00:00+08:00 7208.200000 7285.100000 7185.400000 \n1 2020-01-02 08:00:00+08:00 7212.395985 7225.800000 6963.000000 \n2 2020-01-03 08:00:00+08:00 6989.400000 7444.900000 6909.300000 \n3 2020-01-04 08:00:00+08:00 7371.100000 7422.000000 7297.300000 \n4 2020-01-05 08:00:00+08:00 7370.300000 7509.900000 7315.800000 \n.. ... ... ... ... \n420 2021-02-24 08:00:00+08:00 48882.000000 51354.461371 46902.000000 \n421 2021-02-25 08:00:00+08:00 49715.000000 52189.000000 46750.000000 \n422 2021-02-26 08:00:00+08:00 47155.000000 48441.000000 44027.000000 \n423 2021-02-27 08:00:00+08:00 46270.000000 48407.000000 45100.000000 \n424 2021-02-28 08:00:00+08:00 46199.000000 46703.000000 43953.324546 \n\n close volume \n0 7212.700000 2071.056046 \n1 6989.400000 4849.338447 \n2 7371.200000 6681.668741 \n3 7369.831761 4265.712855 \n4 7364.600000 4450.635475 \n.. ... ... \n420 48211.000000 11440.440942 \n421 47162.000000 9532.427537 \n422 46266.000000 22311.509035 \n423 46187.000000 7602.735403 \n424 45364.000000 4663.404611 \n\n[425 rows x 6 columns]", "text/html": "
\n\n
\n \n \n | \n index | \n open | \n high | \n low | \n close | \n volume | \n
\n \n \n \n 0 | \n 2020-01-01 08:00:00+08:00 | \n 7208.200000 | \n 7285.100000 | \n 7185.400000 | \n 7212.700000 | \n 2071.056046 | \n
\n \n 1 | \n 2020-01-02 08:00:00+08:00 | \n 7212.395985 | \n 7225.800000 | \n 6963.000000 | \n 6989.400000 | \n 4849.338447 | \n
\n \n 2 | \n 2020-01-03 08:00:00+08:00 | \n 6989.400000 | \n 7444.900000 | \n 6909.300000 | \n 7371.200000 | \n 6681.668741 | \n
\n \n 3 | \n 2020-01-04 08:00:00+08:00 | \n 7371.100000 | \n 7422.000000 | \n 7297.300000 | \n 7369.831761 | \n 4265.712855 | \n
\n \n 4 | \n 2020-01-05 08:00:00+08:00 | \n 7370.300000 | \n 7509.900000 | \n 7315.800000 | \n 7364.600000 | \n 4450.635475 | \n
\n \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n 420 | \n 2021-02-24 08:00:00+08:00 | \n 48882.000000 | \n 51354.461371 | \n 46902.000000 | \n 48211.000000 | \n 11440.440942 | \n
\n \n 421 | \n 2021-02-25 08:00:00+08:00 | \n 49715.000000 | \n 52189.000000 | \n 46750.000000 | \n 47162.000000 | \n 9532.427537 | \n
\n \n 422 | \n 2021-02-26 08:00:00+08:00 | \n 47155.000000 | \n 48441.000000 | \n 44027.000000 | \n 46266.000000 | \n 22311.509035 | \n
\n \n 423 | \n 2021-02-27 08:00:00+08:00 | \n 46270.000000 | \n 48407.000000 | \n 45100.000000 | \n 46187.000000 | \n 7602.735403 | \n
\n \n 424 | \n 2021-02-28 08:00:00+08:00 | \n 46199.000000 | \n 46703.000000 | \n 43953.324546 | \n 45364.000000 | \n 4663.404611 | \n
\n \n
\n
425 rows \u00d7 6 columns
\n
"}, "metadata": {}}]}, {"metadata": {"trusted": true, "scrolled": true}, "cell_type": "code", "source": "data['pct_change'] = data.close.pct_change() #\u8ba1\u7b97\u5f53\u65e5\u80a1\u7968\u672c\u8eab\u7684\u6536\u76ca\u7387\ndata['ma'] = data.close.rolling(length).mean() #\u8ba1\u7b97\u5747\u4ef7\ndata['std'] = data.close.rolling(length).std() #\u8ba1\u7b97\u6807\u51c6\u5dee\ndata.tail(15)", "execution_count": 214, "outputs": [{"output_type": "execute_result", "execution_count": 214, "data": {"text/plain": " index open high low \\\n410 2021-02-14 08:00:00+08:00 47177.861058 49659.000000 47030.000000 \n411 2021-02-15 08:00:00+08:00 48597.000000 48959.000000 45730.501813 \n412 2021-02-16 08:00:00+08:00 47934.000000 50490.000000 47046.000000 \n413 2021-02-17 08:00:00+08:00 49182.000000 52564.000000 49000.000000 \n414 2021-02-18 08:00:00+08:00 52110.000000 52539.000000 50863.000000 \n415 2021-02-19 08:00:00+08:00 51566.000000 56342.000000 50755.000000 \n416 2021-02-20 08:00:00+08:00 55866.000000 57485.000000 55050.000000 \n417 2021-02-21 08:00:00+08:00 55787.000000 57855.000000 55386.000000 \n418 2021-02-22 08:00:00+08:00 57374.000000 57449.000000 48255.000000 \n419 2021-02-23 08:00:00+08:00 54070.362174 54138.000000 45000.000000 \n420 2021-02-24 08:00:00+08:00 48882.000000 51354.461371 46902.000000 \n421 2021-02-25 08:00:00+08:00 49715.000000 52189.000000 46750.000000 \n422 2021-02-26 08:00:00+08:00 47155.000000 48441.000000 44027.000000 \n423 2021-02-27 08:00:00+08:00 46270.000000 48407.000000 45100.000000 \n424 2021-02-28 08:00:00+08:00 46199.000000 46703.000000 43953.324546 \n\n close volume pct_change ma std \n410 48645.968885 7333.790162 0.032209 46966.709841 1136.415925 \n411 47952.465869 9554.453839 -0.014256 47218.633536 1130.727674 \n412 48704.000000 12361.475103 0.015672 47536.204965 1199.132982 \n413 52475.000000 8425.738085 0.077427 48580.919251 1813.944646 \n414 51901.000000 5611.827580 -0.010939 49175.204965 2144.279767 \n415 55866.000000 11544.344482 0.076395 50381.776394 3138.017043 \n416 56736.000000 9100.123637 0.015573 51754.347822 3551.627240 \n417 57368.000000 3201.204672 0.011139 53000.352267 3800.607801 \n418 52340.000000 22563.476615 -0.087645 53627.142857 3132.426133 \n419 48426.000000 32570.457216 -0.074780 53587.428571 3206.141807 \n420 48211.000000 11440.440942 -0.004440 52978.285714 3802.349568 \n421 47162.000000 9532.427537 -0.021759 52301.285714 4400.899632 \n422 46266.000000 22311.509035 -0.018998 50929.857143 4596.362273 \n423 46187.000000 7602.735403 -0.001708 49422.857143 4075.236861 \n424 45364.000000 4663.404611 -0.017819 47708.000000 2324.120407 ", "text/html": "\n\n
\n \n \n | \n index | \n open | \n high | \n low | \n close | \n volume | \n pct_change | \n ma | \n std | \n
\n \n \n \n 410 | \n 2021-02-14 08:00:00+08:00 | \n 47177.861058 | \n 49659.000000 | \n 47030.000000 | \n 48645.968885 | \n 7333.790162 | \n 0.032209 | \n 46966.709841 | \n 1136.415925 | \n
\n \n 411 | \n 2021-02-15 08:00:00+08:00 | \n 48597.000000 | \n 48959.000000 | \n 45730.501813 | \n 47952.465869 | \n 9554.453839 | \n -0.014256 | \n 47218.633536 | \n 1130.727674 | \n
\n \n 412 | \n 2021-02-16 08:00:00+08:00 | \n 47934.000000 | \n 50490.000000 | \n 47046.000000 | \n 48704.000000 | \n 12361.475103 | \n 0.015672 | \n 47536.204965 | \n 1199.132982 | \n
\n \n 413 | \n 2021-02-17 08:00:00+08:00 | \n 49182.000000 | \n 52564.000000 | \n 49000.000000 | \n 52475.000000 | \n 8425.738085 | \n 0.077427 | \n 48580.919251 | \n 1813.944646 | \n
\n \n 414 | \n 2021-02-18 08:00:00+08:00 | \n 52110.000000 | \n 52539.000000 | \n 50863.000000 | \n 51901.000000 | \n 5611.827580 | \n -0.010939 | \n 49175.204965 | \n 2144.279767 | \n
\n \n 415 | \n 2021-02-19 08:00:00+08:00 | \n 51566.000000 | \n 56342.000000 | \n 50755.000000 | \n 55866.000000 | \n 11544.344482 | \n 0.076395 | \n 50381.776394 | \n 3138.017043 | \n
\n \n 416 | \n 2021-02-20 08:00:00+08:00 | \n 55866.000000 | \n 57485.000000 | \n 55050.000000 | \n 56736.000000 | \n 9100.123637 | \n 0.015573 | \n 51754.347822 | \n 3551.627240 | \n
\n \n 417 | \n 2021-02-21 08:00:00+08:00 | \n 55787.000000 | \n 57855.000000 | \n 55386.000000 | \n 57368.000000 | \n 3201.204672 | \n 0.011139 | \n 53000.352267 | \n 3800.607801 | \n
\n \n 418 | \n 2021-02-22 08:00:00+08:00 | \n 57374.000000 | \n 57449.000000 | \n 48255.000000 | \n 52340.000000 | \n 22563.476615 | \n -0.087645 | \n 53627.142857 | \n 3132.426133 | \n
\n \n 419 | \n 2021-02-23 08:00:00+08:00 | \n 54070.362174 | \n 54138.000000 | \n 45000.000000 | \n 48426.000000 | \n 32570.457216 | \n -0.074780 | \n 53587.428571 | \n 3206.141807 | \n
\n \n 420 | \n 2021-02-24 08:00:00+08:00 | \n 48882.000000 | \n 51354.461371 | \n 46902.000000 | \n 48211.000000 | \n 11440.440942 | \n -0.004440 | \n 52978.285714 | \n 3802.349568 | \n
\n \n 421 | \n 2021-02-25 08:00:00+08:00 | \n 49715.000000 | \n 52189.000000 | \n 46750.000000 | \n 47162.000000 | \n 9532.427537 | \n -0.021759 | \n 52301.285714 | \n 4400.899632 | \n
\n \n 422 | \n 2021-02-26 08:00:00+08:00 | \n 47155.000000 | \n 48441.000000 | \n 44027.000000 | \n 46266.000000 | \n 22311.509035 | \n -0.018998 | \n 50929.857143 | \n 4596.362273 | \n
\n \n 423 | \n 2021-02-27 08:00:00+08:00 | \n 46270.000000 | \n 48407.000000 | \n 45100.000000 | \n 46187.000000 | \n 7602.735403 | \n -0.001708 | \n 49422.857143 | \n 4075.236861 | \n
\n \n 424 | \n 2021-02-28 08:00:00+08:00 | \n 46199.000000 | \n 46703.000000 | \n 43953.324546 | \n 45364.000000 | \n 4663.404611 | \n -0.017819 | \n 47708.000000 | \n 2324.120407 | \n
\n \n
\n
"}, "metadata": {}}]}, {"metadata": {"trusted": true}, "cell_type": "code", "source": "data['std_limit'] = data['std'].rolling(length).max() #\u8ba1\u7b97\u4e00\u5b9a\u5468\u671f\u5185\u7684\u6700\u5927\u6807\u51c6\u5dee\ndata['yes_ma'] = data['ma'].shift(1) #\u8ba1\u7b97\u6628\u65e5\u7684ma\ndata['yes_std_limit'] = data['std_limit'].shift(1) #\u8ba1\u7b97\u6628\u65e5\u7684\u6807\u51c6\u5dee\ndata", "execution_count": 215, "outputs": [{"output_type": "execute_result", "execution_count": 215, "data": {"text/plain": " index open high low \\\n0 2020-01-01 08:00:00+08:00 7208.200000 7285.100000 7185.400000 \n1 2020-01-02 08:00:00+08:00 7212.395985 7225.800000 6963.000000 \n2 2020-01-03 08:00:00+08:00 6989.400000 7444.900000 6909.300000 \n3 2020-01-04 08:00:00+08:00 7371.100000 7422.000000 7297.300000 \n4 2020-01-05 08:00:00+08:00 7370.300000 7509.900000 7315.800000 \n.. ... ... ... ... \n420 2021-02-24 08:00:00+08:00 48882.000000 51354.461371 46902.000000 \n421 2021-02-25 08:00:00+08:00 49715.000000 52189.000000 46750.000000 \n422 2021-02-26 08:00:00+08:00 47155.000000 48441.000000 44027.000000 \n423 2021-02-27 08:00:00+08:00 46270.000000 48407.000000 45100.000000 \n424 2021-02-28 08:00:00+08:00 46199.000000 46703.000000 43953.324546 \n\n close volume pct_change ma std \\\n0 7212.700000 2071.056046 NaN NaN NaN \n1 6989.400000 4849.338447 -0.030959 NaN NaN \n2 7371.200000 6681.668741 0.054626 NaN NaN \n3 7369.831761 4265.712855 -0.000186 NaN NaN \n4 7364.600000 4450.635475 -0.000710 NaN NaN \n.. ... ... ... ... ... \n420 48211.000000 11440.440942 -0.004440 52978.285714 3802.349568 \n421 47162.000000 9532.427537 -0.021759 52301.285714 4400.899632 \n422 46266.000000 22311.509035 -0.018998 50929.857143 4596.362273 \n423 46187.000000 7602.735403 -0.001708 49422.857143 4075.236861 \n424 45364.000000 4663.404611 -0.017819 47708.000000 2324.120407 \n\n std_limit yes_ma yes_std_limit \n0 NaN NaN NaN \n1 NaN NaN NaN \n2 NaN NaN NaN \n3 NaN NaN NaN \n4 NaN NaN NaN \n.. ... ... ... \n420 3802.349568 53587.428571 3800.607801 \n421 4400.899632 52978.285714 3802.349568 \n422 4596.362273 52301.285714 4400.899632 \n423 4596.362273 50929.857143 4596.362273 \n424 4596.362273 49422.857143 4596.362273 \n\n[425 rows x 12 columns]", "text/html": "\n\n
\n \n \n | \n index | \n open | \n high | \n low | \n close | \n volume | \n pct_change | \n ma | \n std | \n std_limit | \n yes_ma | \n yes_std_limit | \n
\n \n \n \n 0 | \n 2020-01-01 08:00:00+08:00 | \n 7208.200000 | \n 7285.100000 | \n 7185.400000 | \n 7212.700000 | \n 2071.056046 | \n NaN | \n NaN | \n NaN | \n NaN | \n NaN | \n NaN | \n
\n \n 1 | \n 2020-01-02 08:00:00+08:00 | \n 7212.395985 | \n 7225.800000 | \n 6963.000000 | \n 6989.400000 | \n 4849.338447 | \n -0.030959 | \n NaN | \n NaN | \n NaN | \n NaN | \n NaN | \n
\n \n 2 | \n 2020-01-03 08:00:00+08:00 | \n 6989.400000 | \n 7444.900000 | \n 6909.300000 | \n 7371.200000 | \n 6681.668741 | \n 0.054626 | \n NaN | \n NaN | \n NaN | \n NaN | \n NaN | \n
\n \n 3 | \n 2020-01-04 08:00:00+08:00 | \n 7371.100000 | \n 7422.000000 | \n 7297.300000 | \n 7369.831761 | \n 4265.712855 | \n -0.000186 | \n NaN | \n NaN | \n NaN | \n NaN | \n NaN | \n
\n \n 4 | \n 2020-01-05 08:00:00+08:00 | \n 7370.300000 | \n 7509.900000 | \n 7315.800000 | \n 7364.600000 | \n 4450.635475 | \n -0.000710 | \n NaN | \n NaN | \n NaN | \n NaN | \n NaN | \n
\n \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n ... | \n
\n \n 420 | \n 2021-02-24 08:00:00+08:00 | \n 48882.000000 | \n 51354.461371 | \n 46902.000000 | \n 48211.000000 | \n 11440.440942 | \n -0.004440 | \n 52978.285714 | \n 3802.349568 | \n 3802.349568 | \n 53587.428571 | \n 3800.607801 | \n
\n \n 421 | \n 2021-02-25 08:00:00+08:00 | \n 49715.000000 | \n 52189.000000 | \n 46750.000000 | \n 47162.000000 | \n 9532.427537 | \n -0.021759 | \n 52301.285714 | \n 4400.899632 | \n 4400.899632 | \n 52978.285714 | \n 3802.349568 | \n
\n \n 422 | \n 2021-02-26 08:00:00+08:00 | \n 47155.000000 | \n 48441.000000 | \n 44027.000000 | \n 46266.000000 | \n 22311.509035 | \n -0.018998 | \n 50929.857143 | \n 4596.362273 | \n 4596.362273 | \n 52301.285714 | \n 4400.899632 | \n
\n \n 423 | \n 2021-02-27 08:00:00+08:00 | \n 46270.000000 | \n 48407.000000 | \n 45100.000000 | \n 46187.000000 | \n 7602.735403 | \n -0.001708 | \n 49422.857143 | \n 4075.236861 | \n 4596.362273 | \n 50929.857143 | \n 4596.362273 | \n
\n \n 424 | \n 2021-02-28 08:00:00+08:00 | \n 46199.000000 | \n 46703.000000 | \n 43953.324546 | \n 45364.000000 | \n 4663.404611 | \n -0.017819 | \n 47708.000000 | \n 2324.120407 | \n 4596.362273 | \n 49422.857143 | \n 4596.362273 | \n
\n \n
\n
425 rows \u00d7 12 columns
\n
"}, "metadata": {}}]}, {"metadata": {"trusted": true}, "cell_type": "code", "source": "data['long_open_price'] = data.yes_ma + open_trigger * data.yes_std_limit #\u8ba1\u7b97\u6bcf\u4e00\u5929\u6ee1\u8db3\u7684\u5f00\u4ed3\u4ef7\ndata['long_stopwin_price'] = data.yes_ma + stopwin_trigger * data.yes_std_limit #\u8ba1\u7b97\u6bcf\u4e00\u5929\u6ee1\u8db3\u6761\u4ef6\u7684\u6b62\u76c8\u4ef7\uff0c\u4ef7\u683c\u9ad8\u4e8e\u4e09\u500d\u6807\u51c6\u5dee\u6700\u5927\u503c\u6b62\u76c8\n#data.loc[10:15,['date','ma','std','yes_ma','std_limit','yes_std_limit','long_open_price','long_stopwin_price']] #.loc[10:15] \u8868\u793a\u53ea\u663e\u793a10-15\u884c\u6570\u636e\ndata.tail(15)", "execution_count": 216, "outputs": [{"output_type": "execute_result", "execution_count": 216, "data": {"text/plain": " index open high low \\\n410 2021-02-14 08:00:00+08:00 47177.861058 49659.000000 47030.000000 \n411 2021-02-15 08:00:00+08:00 48597.000000 48959.000000 45730.501813 \n412 2021-02-16 08:00:00+08:00 47934.000000 50490.000000 47046.000000 \n413 2021-02-17 08:00:00+08:00 49182.000000 52564.000000 49000.000000 \n414 2021-02-18 08:00:00+08:00 52110.000000 52539.000000 50863.000000 \n415 2021-02-19 08:00:00+08:00 51566.000000 56342.000000 50755.000000 \n416 2021-02-20 08:00:00+08:00 55866.000000 57485.000000 55050.000000 \n417 2021-02-21 08:00:00+08:00 55787.000000 57855.000000 55386.000000 \n418 2021-02-22 08:00:00+08:00 57374.000000 57449.000000 48255.000000 \n419 2021-02-23 08:00:00+08:00 54070.362174 54138.000000 45000.000000 \n420 2021-02-24 08:00:00+08:00 48882.000000 51354.461371 46902.000000 \n421 2021-02-25 08:00:00+08:00 49715.000000 52189.000000 46750.000000 \n422 2021-02-26 08:00:00+08:00 47155.000000 48441.000000 44027.000000 \n423 2021-02-27 08:00:00+08:00 46270.000000 48407.000000 45100.000000 \n424 2021-02-28 08:00:00+08:00 46199.000000 46703.000000 43953.324546 \n\n close volume pct_change ma std \\\n410 48645.968885 7333.790162 0.032209 46966.709841 1136.415925 \n411 47952.465869 9554.453839 -0.014256 47218.633536 1130.727674 \n412 48704.000000 12361.475103 0.015672 47536.204965 1199.132982 \n413 52475.000000 8425.738085 0.077427 48580.919251 1813.944646 \n414 51901.000000 5611.827580 -0.010939 49175.204965 2144.279767 \n415 55866.000000 11544.344482 0.076395 50381.776394 3138.017043 \n416 56736.000000 9100.123637 0.015573 51754.347822 3551.627240 \n417 57368.000000 3201.204672 0.011139 53000.352267 3800.607801 \n418 52340.000000 22563.476615 -0.087645 53627.142857 3132.426133 \n419 48426.000000 32570.457216 -0.074780 53587.428571 3206.141807 \n420 48211.000000 11440.440942 -0.004440 52978.285714 3802.349568 \n421 47162.000000 9532.427537 -0.021759 52301.285714 4400.899632 \n422 46266.000000 22311.509035 -0.018998 50929.857143 4596.362273 \n423 46187.000000 7602.735403 -0.001708 49422.857143 4075.236861 \n424 45364.000000 4663.404611 -0.017819 47708.000000 2324.120407 \n\n std_limit yes_ma yes_std_limit long_open_price \\\n410 4200.848435 45596.142857 4200.848435 46436.312544 \n411 4200.848435 46966.709841 4200.848435 47806.879528 \n412 4200.848435 47218.633536 4200.848435 48058.803223 \n413 4200.848435 47536.204965 4200.848435 48376.374652 \n414 3743.459935 48580.919251 4200.848435 49421.088938 \n415 3138.017043 49175.204965 3743.459935 49923.896952 \n416 3551.627240 50381.776394 3138.017043 51009.379802 \n417 3800.607801 51754.347822 3551.627240 52464.673270 \n418 3800.607801 53000.352267 3800.607801 53760.473827 \n419 3800.607801 53627.142857 3800.607801 54387.264417 \n420 3802.349568 53587.428571 3800.607801 54347.550132 \n421 4400.899632 52978.285714 3802.349568 53738.755628 \n422 4596.362273 52301.285714 4400.899632 53181.465641 \n423 4596.362273 50929.857143 4596.362273 51849.129597 \n424 4596.362273 49422.857143 4596.362273 50342.129597 \n\n long_stopwin_price \n410 56098.263944 \n411 57468.830928 \n412 57720.754623 \n413 58038.326052 \n414 59083.040337 \n415 58533.854803 \n416 58226.819001 \n417 60633.415922 \n418 62501.871769 \n419 63128.662359 \n420 63088.948073 \n421 62484.159635 \n422 63303.534794 \n423 62420.762825 \n424 60913.762825 ", "text/html": "\n\n
\n \n \n | \n index | \n open | \n high | \n low | \n close | \n volume | \n pct_change | \n ma | \n std | \n std_limit | \n yes_ma | \n yes_std_limit | \n long_open_price | \n long_stopwin_price | \n
\n \n \n \n 410 | \n 2021-02-14 08:00:00+08:00 | \n 47177.861058 | \n 49659.000000 | \n 47030.000000 | \n 48645.968885 | \n 7333.790162 | \n 0.032209 | \n 46966.709841 | \n 1136.415925 | \n 4200.848435 | \n 45596.142857 | \n 4200.848435 | \n 46436.312544 | \n 56098.263944 | \n
\n \n 411 | \n 2021-02-15 08:00:00+08:00 | \n 48597.000000 | \n 48959.000000 | \n 45730.501813 | \n 47952.465869 | \n 9554.453839 | \n -0.014256 | \n 47218.633536 | \n 1130.727674 | \n 4200.848435 | \n 46966.709841 | \n 4200.848435 | \n 47806.879528 | \n 57468.830928 | \n
\n \n 412 | \n 2021-02-16 08:00:00+08:00 | \n 47934.000000 | \n 50490.000000 | \n 47046.000000 | \n 48704.000000 | \n 12361.475103 | \n 0.015672 | \n 47536.204965 | \n 1199.132982 | \n 4200.848435 | \n 47218.633536 | \n 4200.848435 | \n 48058.803223 | \n 57720.754623 | \n
\n \n 413 | \n 2021-02-17 08:00:00+08:00 | \n 49182.000000 | \n 52564.000000 | \n 49000.000000 | \n 52475.000000 | \n 8425.738085 | \n 0.077427 | \n 48580.919251 | \n 1813.944646 | \n 4200.848435 | \n 47536.204965 | \n 4200.848435 | \n 48376.374652 | \n 58038.326052 | \n
\n \n 414 | \n 2021-02-18 08:00:00+08:00 | \n 52110.000000 | \n 52539.000000 | \n 50863.000000 | \n 51901.000000 | \n 5611.827580 | \n -0.010939 | \n 49175.204965 | \n 2144.279767 | \n 3743.459935 | \n 48580.919251 | \n 4200.848435 | \n 49421.088938 | \n 59083.040337 | \n
\n \n 415 | \n 2021-02-19 08:00:00+08:00 | \n 51566.000000 | \n 56342.000000 | \n 50755.000000 | \n 55866.000000 | \n 11544.344482 | \n 0.076395 | \n 50381.776394 | \n 3138.017043 | \n 3138.017043 | \n 49175.204965 | \n 3743.459935 | \n 49923.896952 | \n 58533.854803 | \n
\n \n 416 | \n 2021-02-20 08:00:00+08:00 | \n 55866.000000 | \n 57485.000000 | \n 55050.000000 | \n 56736.000000 | \n 9100.123637 | \n 0.015573 | \n 51754.347822 | \n 3551.627240 | \n 3551.627240 | \n 50381.776394 | \n 3138.017043 | \n 51009.379802 | \n 58226.819001 | \n
\n \n 417 | \n 2021-02-21 08:00:00+08:00 | \n 55787.000000 | \n 57855.000000 | \n 55386.000000 | \n 57368.000000 | \n 3201.204672 | \n 0.011139 | \n 53000.352267 | \n 3800.607801 | \n 3800.607801 | \n 51754.347822 | \n 3551.627240 | \n 52464.673270 | \n 60633.415922 | \n
\n \n 418 | \n 2021-02-22 08:00:00+08:00 | \n 57374.000000 | \n 57449.000000 | \n 48255.000000 | \n 52340.000000 | \n 22563.476615 | \n -0.087645 | \n 53627.142857 | \n 3132.426133 | \n 3800.607801 | \n 53000.352267 | \n 3800.607801 | \n 53760.473827 | \n 62501.871769 | \n
\n \n 419 | \n 2021-02-23 08:00:00+08:00 | \n 54070.362174 | \n 54138.000000 | \n 45000.000000 | \n 48426.000000 | \n 32570.457216 | \n -0.074780 | \n 53587.428571 | \n 3206.141807 | \n 3800.607801 | \n 53627.142857 | \n 3800.607801 | \n 54387.264417 | \n 63128.662359 | \n
\n \n 420 | \n 2021-02-24 08:00:00+08:00 | \n 48882.000000 | \n 51354.461371 | \n 46902.000000 | \n 48211.000000 | \n 11440.440942 | \n -0.004440 | \n 52978.285714 | \n 3802.349568 | \n 3802.349568 | \n 53587.428571 | \n 3800.607801 | \n 54347.550132 | \n 63088.948073 | \n
\n \n 421 | \n 2021-02-25 08:00:00+08:00 | \n 49715.000000 | \n 52189.000000 | \n 46750.000000 | \n 47162.000000 | \n 9532.427537 | \n -0.021759 | \n 52301.285714 | \n 4400.899632 | \n 4400.899632 | \n 52978.285714 | \n 3802.349568 | \n 53738.755628 | \n 62484.159635 | \n
\n \n 422 | \n 2021-02-26 08:00:00+08:00 | \n 47155.000000 | \n 48441.000000 | \n 44027.000000 | \n 46266.000000 | \n 22311.509035 | \n -0.018998 | \n 50929.857143 | \n 4596.362273 | \n 4596.362273 | \n 52301.285714 | \n 4400.899632 | \n 53181.465641 | \n 63303.534794 | \n
\n \n 423 | \n 2021-02-27 08:00:00+08:00 | \n 46270.000000 | \n 48407.000000 | \n 45100.000000 | \n 46187.000000 | \n 7602.735403 | \n -0.001708 | \n 49422.857143 | \n 4075.236861 | \n 4596.362273 | \n 50929.857143 | \n 4596.362273 | \n 51849.129597 | \n 62420.762825 | \n
\n \n 424 | \n 2021-02-28 08:00:00+08:00 | \n 46199.000000 | \n 46703.000000 | \n 43953.324546 | \n 45364.000000 | \n 4663.404611 | \n -0.017819 | \n 47708.000000 | \n 2324.120407 | \n 4596.362273 | \n 49422.857143 | \n 4596.362273 | \n 50342.129597 | \n 60913.762825 | \n
\n \n
\n
"}, "metadata": {}}]}, {"metadata": {"trusted": true}, "cell_type": "code", "source": "data['long_open_signal'] = np.where(data.high > data.long_open_price,1,0) #\u5f53\u65e5\u6700\u9ad8\u4ef7\u5927\u4e8e\u5f00\u4ed3\u4ef7\uff0c\u5c31\u8fdb\u884c\u5f00\u4ed3\u64cd\u4f5c\ndata['long_stopwin_signal'] = np.where(data.high > data.long_stopwin_price ,1,0) #\u5f53\u65e5\u6700\u9ad8\u4ef7\u5927\u4e8e\u6b62\u76c8\u4ef7\uff0c\u5c31\u8fdb\u884c\u6b62\u76c8\u64cd\u4f5c\ndata[['long_open_signal','long_stopwin_signal']].tail()", "execution_count": 217, "outputs": [{"output_type": "execute_result", "execution_count": 217, "data": {"text/plain": " long_open_signal long_stopwin_signal\n420 0 0\n421 0 0\n422 0 0\n423 0 0\n424 0 0", "text/html": "\n\n
\n \n \n | \n long_open_signal | \n long_stopwin_signal | \n
\n \n \n \n 420 | \n 0 | \n 0 | \n
\n \n 421 | \n 0 | \n 0 | \n
\n \n 422 | \n 0 | \n 0 | \n
\n \n 423 | \n 0 | \n 0 | \n
\n \n 424 | \n 0 | \n 0 | \n
\n \n
\n
"}, "metadata": {}}]}, {"metadata": {"trusted": true}, "cell_type": "code", "source": "# \u524d12\u4e2a\u6570\u636e\u56e0\u5747\u503c\u8ba1\u7b97\u65e0\u6548\u6240\u4ee5\u4e0d\u4f5c\u4e3a\u5f85\u5904\u7406\u6570\u636e\n# \u7ec8\u6b62\u6570\u636e\u9009\u62e9\u5012\u6570\u7b2c\u4e8c\u4e2a\u4ee5\u9632\u6b62\u5f53\u5929\u6b62\u76c8\u60c5\u51b5\u4f1a\u4ee5\u7b2c\u4e8c\u5929\u5f00\u76d8\u4ef7\u5e73\u4ed3\u5bfc\u81f4\u65e0\u6570\u636e\u60c5\u51b5\u53d1\u751f\n# \u6700\u540e\u4e00\u5929\u4e0d\u518d\u8fdb\u884c\u64cd\u4f5c\uff1b\u53ef\u80fd\u4f1a\u9762\u4e34\u6700\u540e\u4e00\u5929\u5f00\u4ed3\u4e4b\u540e\u5f53\u5929\u89e6\u53d1\u5e73\u4ed3\uff0c\u8981\u7528\u4e0b\u4e00\u5929\u5f00\u76d8\u4ef7\u5356\u51fa\uff0c\u65e0\u6cd5\u5f97\u5230\uff1b \nflag = 0\ntimes = 0\nfor i in range(12, (len(data)-1)):\n # \u6709\u6301\u4ed3\u8fdb\u884c\u5e73\u4ed3\n if flag == 1:\n # \u8ba1\u7b97\u6b62\u635f\u4ef7\u683c\uff0c\u53d6\u5747\u7ebf\u548c\u5f00\u4ed3\u4ef7\u4e0b\u79fb\u4e00\u5b9a\u500d\u6570\u6807\u51c6\u5dee\uff0c\u4e24\u8005\u7684\u6700\u5927\u503c\u4f5c\u4e3a\u6b62\u635f\u4ef7\n stoplose_price = max(data.loc[i,'yes_ma'], long_open_price - long_open_delta * stoplose_trigger) \n # \u591a\u5934\u6b62\u76c8\u5e76\u8ba1\u7b97\u5f53\u65e5\u6536\u76ca\u7387\n if data.loc[i, 'long_stopwin_signal']: \n data.loc[i, 'return'] = data.loc[i, 'long_stopwin_price']/data.loc[i-1, 'close'] - 1\n flag = 0\n \n \n # \u591a\u5934\u79fb\u52a8\u6b62\u635f\u5e76\u8ba1\u7b97\u5f53\u65e5\u6536\u76ca\u7387\n elif data.loc[i, 'low'] < stoplose_price: \n # \u8003\u8651\u5230\u5f53\u5929\u5f00\u76d8\u4ef7\u5c31\u4f4e\u4e8e\u6b62\u635f\u4ef7\uff0c\u65e0\u6cd5\u6b62\u635f\u7684\u60c5\u51b5\uff1b\n # \u8c28\u614e\u8d77\u89c1\uff0c\u5728\u8ba1\u7b97\u6536\u76ca\u65f6\uff0c\u53d6\u6b62\u635f\u4ef7\u548c\u5f00\u76d8\u4ef7\u7684\u6700\u5c0f\u503c\uff1b\n data.loc[i, 'return'] = min(data.loc[i, 'open'], stoplose_price)/data.loc[i-1, 'close'] - 1\n flag = 0\n # \u591a\u5934\u6301\u4ed3\u5e76\u8ba1\u7b97\u6536\u76ca\u7387\n \n else: \n data.loc[i, 'return'] = data.loc[i, 'close']/data.loc[i-1, 'close'] - 1\n\n \n # \u65e0\u6301\u4ed3\u8fdb\u884c\u5f00\u4ed3\n else:\n if data.loc[i, 'long_open_signal']: \n # \u9700\u8981\u6bd4\u8f83\u5f53\u5929\u7684\u5f00\u76d8\u4ef7\u548c\u5f00\u4ed3\u4ef7\uff0c\u5f53\u5f00\u76d8\u4ef7\u9ad8\u4e8e\u5f00\u4ed3\u4ef7\u65f6\uff0c\u53ea\u80fd\u4ee5\u5f00\u76d8\u4ef7\u8fdb\u884c\u5f00\u4ed3\uff0c\u4e0d\u80fd\u7528\u5f00\u4ed3\u4ef7;\n # \u5426\u5219\u5bf9\u5bfc\u81f4\u7b56\u7565\u6536\u76ca\u9ad8\u4f30\uff1b\n # \u8bb0\u5f55\u5f00\u4ed3\u4ef7\n long_open_price = max(data.loc[i, 'open'], data.loc[i, 'long_open_price']) \n# long_open_price = data.loc[i, 'long_open_price'] #\u5b58\u5728\u95ee\u9898\uff1b\n # \u8bb0\u5f55\u5f00\u4ed3\u65f6\u768410\u5929\u5185\u7684\u6807\u51c6\u5dee\u7684\u6700\u5927\u503c\uff1b\u662f\u4e3a\u4e86\u8ba1\u7b97\u56fa\u5b9a\u6b62\u635f\u7684\u4ef7\u683c\uff1b\n long_open_delta = data.loc[i, 'yes_std_limit']\n # \u8bb0\u5f55\u5f53\u5929\u76c8\u5229\u60c5\u51b5\n data.loc[i, 'return'] = data.loc[i, 'close']/long_open_price - 1\n \n \n # \u8ba1\u7b97\u6b62\u635f\u4ef7\uff1a\u591a\u5934\u79fb\u52a8\u6b62\u635f\uff0c\u4ee5\u5747\u7ebf\u548c\u5f00\u4ed3\u4ef7\u51cf\u4e00\u5b9a\u500d\u6570\u6807\u51c6\u5dee\uff0c\u4e24\u8005\u7684\u6700\u5927\u503c\u4f5c\u4e3a\u6b62\u635f\u70b9\n stoplose_price = max(data.loc[i,'yes_ma'], long_open_price - long_open_delta * stoplose_trigger)\n # \u5982\u679c\u5f00\u4ed3\u5f53\u5929\u540c\u65f6\u6ee1\u8db3\u5e73\u4ed3\u6761\u4ef6\uff0c\u5219\u4ee5\u7b2c\u4e8c\u5929\u5f00\u76d8\u4ef7\u5e73\u4ed3\n # \u8fd9\u91cc\u505a\u4e86\u4e00\u5b9a\u7684\u8fd1\u4f3c\u5904\u7406\uff1b\n #\u5f00\u4ed3\u65f6\u6807\u8bb0flag=1\n flag = 1\n times = times+1\n if (data.loc[i, 'low'] < stoplose_price # \u6ee1\u8db3\u6b62\u635f\u6761\u4ef6\n or data.loc[i, 'long_stopwin_signal']): # \u6ee1\u8db3\u6b62\u76c8\u6761\u4ef6\n # \u8bb0\u5f55\u6b64\u6b21\u64cd\u4f5c\u76c8\u5229\u60c5\u51b5\u5e76\u5c06\u6536\u76ca\u8bb0\u5f55\u5728\u5f00\u4ed3\u65e5\n data.loc[i, 'return'] = data.loc[i+1, 'open']/long_open_price - 1 \n flag = 0\n ", "execution_count": 218, "outputs": []}, {"metadata": {"trusted": true}, "cell_type": "code", "source": "times", "execution_count": 219, "outputs": [{"output_type": "execute_result", "execution_count": 219, "data": {"text/plain": "163"}, "metadata": {}}]}, {"metadata": {"trusted": true}, "cell_type": "code", "source": "data['return'].fillna(0,inplace=True)\ndata['stratrgy_return'] = (data['return'] + 1).cumprod()\ndata['stock_return'] = (data['pct_change'] + 1 ).cumprod()\n\nmatplotlib.style.use = ('ggplot')\nfig = plt.figure(figsize=(15,10))\nax = fig.add_subplot(1,1,1)\nax.plot(data.stratrgy_return,label='strategy_return')\nax.plot(data.stock_return,label='stock_return')\nplt.title(code)\nplt.legend()", "execution_count": 220, "outputs": [{"output_type": "execute_result", "execution_count": 220, "data": {"text/plain": ""}, "metadata": {}}, {"output_type": "display_data", "data": {"text/plain": "