first commit
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
# class to support opening and closing trades
|
||||
import json
|
||||
from .config import accountID, token
|
||||
from oandapyV20 import API
|
||||
import oandapyV20.endpoints.trades as trades
|
||||
import oandapyV20.endpoints.orders as orders
|
||||
from oandapyV20.contrib.requests import TradeCloseRequest
|
||||
from oandapyV20.exceptions import V20Error
|
||||
from .account import margin_available, margin_rate
|
||||
from oandapyV20.contrib.requests import (MarketOrderRequest,
|
||||
TakeProfitDetails,
|
||||
StopLossDetails,
|
||||
TrailingStopLossOrderRequest)
|
||||
|
||||
api = API(token)
|
||||
|
||||
def weight(price, allocation):
|
||||
trade_margin = float(margin_available) * allocation
|
||||
trade_value = trade_margin / float(margin_rate)
|
||||
w = round((trade_value/float(price)), 0)
|
||||
return w
|
||||
|
||||
def order(instrument, weight, price, TP, SL):
|
||||
|
||||
if weight > 0:
|
||||
mktOrder = MarketOrderRequest(
|
||||
instrument=instrument,
|
||||
units=weight,
|
||||
takeProfitOnFill=TakeProfitDetails(price=TP).data,
|
||||
stopLossOnFill=StopLossDetails(price=SL).data)
|
||||
r = orders.OrderCreate(accountID, data=mktOrder.data)
|
||||
|
||||
try:
|
||||
rv = api.request(r)
|
||||
#print(r.status_code)
|
||||
except V20Error as e:
|
||||
print(r.status_code, e)
|
||||
else:
|
||||
#print(json.dumps(rv, indent=4))
|
||||
pass
|
||||
|
||||
else:
|
||||
mktOrder = MarketOrderRequest(
|
||||
instrument=instrument,
|
||||
units=weight,
|
||||
takeProfitOnFill=TakeProfitDetails(price=TP).data,
|
||||
stopLossOnFill=StopLossDetails(price=SL).data)
|
||||
r = orders.OrderCreate(accountID, data=mktOrder.data)
|
||||
|
||||
try:
|
||||
rv = api.request(r)
|
||||
#print(r.status_code)
|
||||
except V20Error as e:
|
||||
print(r.status_code, e)
|
||||
else:
|
||||
#print(json.dumps(rv, indent=4))
|
||||
pass
|
||||
|
||||
return r.response
|
||||
|
||||
def trailingStop(tradeID, distance=0.1):
|
||||
activeStop = TrailingStopLossOrderRequest(tradeID=tradeID,
|
||||
r = orders.OrderCreate(accountID,
|
||||
data=activeStop.data))
|
||||
api.request(r)
|
||||
return r.response
|
||||
|
||||
def close(tradeID):
|
||||
close_trade = TradeCloseRequest()
|
||||
r = trades.TradeClose(accountID, tradeID, data=close_trade.data)
|
||||
api.request(r)
|
||||
return r.response
|
||||
|
||||
def closeAll(tradeID_list):
|
||||
for trade in tradeID_list:
|
||||
close(trade)
|
||||
print(trade, "Closed")
|
||||
Reference in New Issue
Block a user