Skip to content

Commit

Permalink
v1.1
Browse files Browse the repository at this point in the history
upgrade STOtypes.mo
  • Loading branch information
iclighthouse committed Dec 8, 2023
1 parent 037e073 commit 5f6e84c
Showing 1 changed file with 81 additions and 8 deletions.
89 changes: 81 additions & 8 deletions src/STOTypes.mo
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ module {
public type Timestamp = Nat; // seconds
public type Price = Nat;
public type OrderSide = { #Sell; #Buy; };
// pro-orders
public type Soid = Nat;
public type Ppm = Nat; // 1 / 1000000
public type STOrderRecords = Trie.Trie<Soid, STOrder>;
Expand All @@ -45,11 +44,16 @@ module {
sloFee1: Nat; //Token1
sloFee2: Float;
gridMaxPerSide: Nat;
proCountMax: Nat;
stopLossCountMax: Nat;
};
public type STType = { #GridOrder }; // {#StopLossOrder; #GridOrder; #IcebergOrder; #VWAP; #TWAP };
public type STType = { #StopLossOrder; #GridOrder; #IcebergOrder; #VWAP; #TWAP }; // {#StopLossOrder; #GridOrder; #IcebergOrder; #VWAP; #TWAP };
public type STStrategy = {
#StopLossOrder: StopLossOrder;
#GridOrder: GridOrder;
#IcebergOrder: IcebergOrder;
#VWAP: VWAP;
#TWAP: TWAP;
};
public type STStats = {
orderCount: Nat;
Expand All @@ -69,7 +73,26 @@ module {
triggerTime: Timestamp;
pendingOrders: { buy: [(?Txid, Price, quantity: Nat)]; sell: [(?Txid, Price, quantity: Nat)] }; // disordered
};
// StopLossOrder
public type Condition = {
triggerPrice: Price;
order: { side: OrderSide; quantity: Nat; price: Price; };
};
public type TriggeredOrder = {
triggerPrice: Price;
order: { side: OrderSide; quantity: Nat; price: Price; };
};
public type StopLossOrder = {
condition: Condition;
triggeredOrder: ?TriggeredOrder;
};
// GridOrder
public type GridOrderSetting = {
lowerLimit: Price;
upperLimit: Price;
spread: {#Arith: Price; #Geom: Ppm };
amount: {#Token0: Nat; #Token1: Nat; #Percent: ?Ppm };
};
public type GridSetting = {
initPrice: Price; // Not allowed to be modified
lowerLimit: Price;
Expand All @@ -89,16 +112,52 @@ module {
setting: GridSetting;
gridPrices: GridPrices; // ordered
};
// IcebergOrder
public type IcebergOrderSetting = {
startingTime: Timestamp; // seconds
endTime: Timestamp;
order: {side: OB.OrderSide; price: Price; };
amountPerTrigger: {#Token0: Nat; #Token1: Nat};
totalLimit: {#Token0: Nat; #Token1: Nat};
};
public type IcebergOrder = {
setting: IcebergOrderSetting;
lastTxid: ?Blob;
};
// VWAP
public type VWAPSetting = {
startingTime: Timestamp; // seconds
endTime: Timestamp;
order: {side: OB.OrderSide; priceSpread: Price; priceLimit: Price; };
amountPerTrigger: {#Token0: Nat; #Token1: Nat};
totalLimit: {#Token0: Nat; #Token1: Nat};
triggerVol: {#Arith: Nat; #Geom: Ppm }; // vol of token1; #Geom: 24h_vol * Ppm / 1000000
};
public type VWAP = {
setting: VWAPSetting;
lastVol: ?Nat; // total vol of token1
};
// TWAP
public type TWAPSetting = {
startingTime: Timestamp; // seconds
endTime: Timestamp;
order: {side: OB.OrderSide; priceSpread: Price; priceLimit: Price; };
amountPerTrigger: {#Token0: Nat; #Token1: Nat};
totalLimit: {#Token0: Nat; #Token1: Nat};
triggerInterval: Nat; // seconds
};
public type TWAP = {
setting: TWAPSetting;
lastTime: ?Timestamp;
};

public type Self = actor {
sto_cancelPendingOrders : shared (_soid: Soid, _sa: ?Sa) -> async ();
sto_createProOrder : shared (_arg: {
#GridOrder: {
lowerLimit: Price;
upperLimit: Price;
spread: {#Arith: Price; #Geom: Ppm };
amount: {#Token0: Nat; #Token1: Nat; #Percent: ?Ppm };
};
#GridOrder: GridOrderSetting;
#IcebergOrder: IcebergOrderSetting;
#VWAP: VWAPSetting;
#TWAP: TWAPSetting;
}, _sa: ?Sa) -> async Soid;
sto_updateProOrder : shared (_soid: Soid, _arg: {
#GridOrder: {
Expand All @@ -108,9 +167,23 @@ module {
amount: ?{#Token0: Nat; #Token1: Nat; #Percent: ?Ppm };
status: ?STStatus;
};
#IcebergOrder: {setting: ?IcebergOrderSetting; status: ?STStatus;};
#VWAP: {setting: ?VWAPSetting; status: ?STStatus;};
#TWAP: {setting: ?TWAPSetting; status: ?STStatus;};
}, _sa: ?Sa) -> async Soid;
sto_createStopLossOrder : shared (_arg: {
triggerPrice: Price;
order: { side: OB.OrderSide; quantity: Nat; price: Price; };
}, _sa: ?Sa) -> async Soid;
sto_updateStopLossOrder : shared (_soid: Soid, _arg: {
triggerPrice: ?Price;
order: ?{ side: OB.OrderSide; quantity: Nat; price: Price; };
status: ?STStatus;
}, _sa: ?Sa) -> async Soid;
sto_getStratOrder : shared query (_soid: Soid) -> async ?STOrder;
sto_getStratOrderByTxid : shared query (_txid: Txid) -> async ?STOrder;
sto_getAccountProOrders : shared query (_a: Address) -> async [STOrder];
sto_getAccountStopLossOrders : shared query (_a: Address) -> async [STOrder];
sto_getConfig : shared query () -> async Setting;
};
}

0 comments on commit 5f6e84c

Please sign in to comment.