Here is some code that will lead to much gain.
But do you know what it will take to put it into action? Not MQL for sure, And you know why?
It is time you start studying a new level of programming, one that will enable you real money making. And more then MT4, you will need to study some math.
from statsmodels.tsa.stattools import acf, pacf
from statsmodels.tsa.arima_model import ARMA
import numpy as np
import pandas as pd
import scipy.stats as st
import statsmodels as sm
import statsmodels.api as smapi
from sklearn.decomposition import PCA
from sklearn.covariance import OAS
from scipy.optimize import minimize
from cvxopt import matrix, solvers
def initialize(context):
context.freq = 1
context.stocks = None
context.screen = 45
context.X = None
context.MRO = sid(5035)
schedule_function(compute,date_rules.week_start(),time_rules.market_open(minutes=10))
schedule_function(trade,date_rules.week_start(),time_rules.market_open(minutes=15))
def handle_data(context, data):
pass
def trade(context, data):
if context.X is None:
return
context.freq = 0
prices = data.history(context.stocks, "price", 300, "1d").resample('W').last()
prices = prices.dropna(axis=1)
prices = prices.drop(context.MRO, axis=1)
copy = prices.copy(True)
for sid in copy:
if not data.can_trade(sid):
prices = prices.drop([sid], axis=1)
ret = prices.pct_change().dropna().values
ret = np.log1p(ret)
R = np.dot(ret, context.X)
sign = 0
for j in range(0, 3):
for i in range(1, 3):
try:
arma = ARMA(R, (j, i))
model = arma.fit(method='css')
sign = np.sum(arma.predict(model.params, len(R), len(R)))
break
except:
continue
W = {}
for i, sid in enumerate(prices):
val = np.sign(sign) * context.X * context.portfolio.portfolio_value * 2
W[sid] = val
wsum = 0
for sid in context.portfolio.positions:
if sid not in context.stocks:
if data.can_trade(sid):
order_target(sid, 0)
for sid in context.stocks:
if sid in W:
if data.can_trade(sid):
wsum += W[sid]
if not np.isnan(W[sid]):
order_target_value(sid, W[sid])
else:
order_target_value(sid, 0)
def compute(context, data):
prices = data.history(context.stocks, "price", 300, "1d").resample('W').last()
prices = prices.dropna(axis=1)
prices = prices.drop(context.MRO, axis=1)
copy = prices.copy(True)
for sid in copy:
if not data.can_trade(sid):
prices = prices.drop([sid], axis=1)
ret = prices.pct_change().dropna().values
ret = np.log1p(ret)
x0 = [1. / np.shape(ret)[1]] * np.shape(ret)[1]
cons = []
cons.append({'type':'ineq', 'fun': lambda x: pacf(np.dot(ret, x), nlags=1)[1] - 0.3 })
cons.append({'type':'eq', 'fun': lambda x: np.sum(x)})
res = minimize( myfunc, x0, args=(ret), constraints=cons, method='SLSQP', options={'maxiter':1000})
if not res['success']:
print res['message']
context.X = [0] * len(res.x)
return
res.x = res.x / np.sum(np.abs(res.x))
context.X = res.x
def myfunc(x, ret):
R = np.dot(ret, x)
ac = pacf(R, nlags=8)[2:]
return np.sum(ac**2)
def before_trading_start(context, data):
if context.screen < 45:
return
else:
context.screen = 0
fundamental_df = get_fundamentals(query(fundamentals.valuation.market_cap)
.filter(fundamentals.asset_classification.morningstar_sector_code == 309)
.filter(fundamentals.valuation.market_cap != None)
.filter(fundamentals.company_reference.primary_exchange_id != "OTCPK")
.filter(fundamentals.share_class_reference.security_type == 'ST00000001')
.filter(~fundamentals.share_class_reference.symbol.contains('_WI'))
.filter(fundamentals.share_class_reference.is_primary_share == True)
.filter(fundamentals.share_class_reference.is_depositary_receipt == False)
.order_by(fundamentals.valuation.market_cap.desc()).limit(30)).T
context.stocks = fundamental_df.index
But do you know what it will take to put it into action? Not MQL for sure, And you know why?
It is time you start studying a new level of programming, one that will enable you real money making. And more then MT4, you will need to study some math.
from statsmodels.tsa.stattools import acf, pacf
from statsmodels.tsa.arima_model import ARMA
import numpy as np
import pandas as pd
import scipy.stats as st
import statsmodels as sm
import statsmodels.api as smapi
from sklearn.decomposition import PCA
from sklearn.covariance import OAS
from scipy.optimize import minimize
from cvxopt import matrix, solvers
def initialize(context):
context.freq = 1
context.stocks = None
context.screen = 45
context.X = None
context.MRO = sid(5035)
schedule_function(compute,date_rules.week_start(),time_rules.market_open(minutes=10))
schedule_function(trade,date_rules.week_start(),time_rules.market_open(minutes=15))
def handle_data(context, data):
pass
def trade(context, data):
if context.X is None:
return
context.freq = 0
prices = data.history(context.stocks, "price", 300, "1d").resample('W').last()
prices = prices.dropna(axis=1)
prices = prices.drop(context.MRO, axis=1)
copy = prices.copy(True)
for sid in copy:
if not data.can_trade(sid):
prices = prices.drop([sid], axis=1)
ret = prices.pct_change().dropna().values
ret = np.log1p(ret)
R = np.dot(ret, context.X)
sign = 0
for j in range(0, 3):
for i in range(1, 3):
try:
arma = ARMA(R, (j, i))
model = arma.fit(method='css')
sign = np.sum(arma.predict(model.params, len(R), len(R)))
break
except:
continue
W = {}
for i, sid in enumerate(prices):
val = np.sign(sign) * context.X * context.portfolio.portfolio_value * 2
W[sid] = val
wsum = 0
for sid in context.portfolio.positions:
if sid not in context.stocks:
if data.can_trade(sid):
order_target(sid, 0)
for sid in context.stocks:
if sid in W:
if data.can_trade(sid):
wsum += W[sid]
if not np.isnan(W[sid]):
order_target_value(sid, W[sid])
else:
order_target_value(sid, 0)
def compute(context, data):
prices = data.history(context.stocks, "price", 300, "1d").resample('W').last()
prices = prices.dropna(axis=1)
prices = prices.drop(context.MRO, axis=1)
copy = prices.copy(True)
for sid in copy:
if not data.can_trade(sid):
prices = prices.drop([sid], axis=1)
ret = prices.pct_change().dropna().values
ret = np.log1p(ret)
x0 = [1. / np.shape(ret)[1]] * np.shape(ret)[1]
cons = []
cons.append({'type':'ineq', 'fun': lambda x: pacf(np.dot(ret, x), nlags=1)[1] - 0.3 })
cons.append({'type':'eq', 'fun': lambda x: np.sum(x)})
res = minimize( myfunc, x0, args=(ret), constraints=cons, method='SLSQP', options={'maxiter':1000})
if not res['success']:
print res['message']
context.X = [0] * len(res.x)
return
res.x = res.x / np.sum(np.abs(res.x))
context.X = res.x
def myfunc(x, ret):
R = np.dot(ret, x)
ac = pacf(R, nlags=8)[2:]
return np.sum(ac**2)
def before_trading_start(context, data):
if context.screen < 45:
return
else:
context.screen = 0
fundamental_df = get_fundamentals(query(fundamentals.valuation.market_cap)
.filter(fundamentals.asset_classification.morningstar_sector_code == 309)
.filter(fundamentals.valuation.market_cap != None)
.filter(fundamentals.company_reference.primary_exchange_id != "OTCPK")
.filter(fundamentals.share_class_reference.security_type == 'ST00000001')
.filter(~fundamentals.share_class_reference.symbol.contains('_WI'))
.filter(fundamentals.share_class_reference.is_primary_share == True)
.filter(fundamentals.share_class_reference.is_depositary_receipt == False)
.order_by(fundamentals.valuation.market_cap.desc()).limit(30)).T
context.stocks = fundamental_df.index
Last edited: