OnTradeTransaction 函数用法求解

 

我的需求是控制日内开单的次数。 手动开单,ea风控。ea解决下单上头的问题

例如,一天开单五次以后就不能开单了。



如果再开一个新的单子

用OnTradeTransaction()函数

执行五次,分别是

//1 TRADE_TRANSACTION_ORDER_ADD order #163851050 ORDER_TYPE_BUY ORDER_STATE_STARTED   

//2 TRADE_TRANSACTION_ORDER_DELETE order #163851050 ORDER_TYPE_BUY ORDER_STATE_FILLED   

//3 TRADE_TRANSACTION_HISTORY_ADD order #163851050 ORDER_TYPE_BUY BTCUSD ORDER_STATE_FILLED   

//4 TRADE_TRANSACTION_DEAL_ADD deal #115800919 DEAL_TYPE_BUY BTCUSD 0.03 lot   

//5 TRADE_TRANSACTION_REQUEST

有没有可能在第一步, TRADE_TRANSACTION_ORDER_ADD  新增订单的时候就把订单拦截下来。

试了在这一步增加条件判断之后,用Trade.OrderDelete(lastOrderID); 不能执行。显示invalid request。


求大神赐教。

只要可以满足需求就可以。不一定在那一步就拦截订单。有别的什么好的取消订单、拦截订单的方法都可以。

谢谢

 

兩個問題不一樣

1/. 一天開五次單 用時間或是K數做限制 再加一個計次的方法限制

if(bar!=bar)

  {

  bar=bar;

  k=0;

}

if(k<5)

 if(開單條件)

  {

  if(開單)

    k++;

  }

以上沒做測試 只提供建議參考


2/. 訂單發出去就到交易服務器 是不能攔截的

     既然要攔截為何不一開始就不要發出去 確定滿足開單條件後再發訂單

 
Hung Wen Lin #:

兩個問題不一樣

1/. 一天開五次單 用時間或是K數做限制 再加一個計次的方法限制

if(bar!=bar)

  {

  bar=bar;

  k=0;

}

if(k<5)

 if(開單條件)

  {

  if(開單)

    k++;

  }

以上沒做測試 只提供建議參考


2/. 訂單發出去就到交易服務器 是不能攔截的

     既然要攔截為何不一開始就不要發出去 確定滿足開單條件後再發訂單

我是手动开单不是ea开单,希望通过ea 来控制日内的开单数量。

ea是一个风控的作用。

订单发出去不能拦截,有没有可能我一开单就能拿到订单号,然后ea平仓呢?

 
ThrallOtaku:

我的需求是控制日内开单的次数。 手动开单,ea风控。ea解决下单上头的问题

例如,一天开单五次以后就不能开单了。



如果再开一个新的单子

用OnTradeTransaction()函数

执行五次,分别是

//1 TRADE_TRANSACTION_ORDER_ADD order #163851050 ORDER_TYPE_BUY ORDER_STATE_STARTED   

//2 TRADE_TRANSACTION_ORDER_DELETE order #163851050 ORDER_TYPE_BUY ORDER_STATE_FILLED   

//3 TRADE_TRANSACTION_HISTORY_ADD order #163851050 ORDER_TYPE_BUY BTCUSD ORDER_STATE_FILLED   

//4 TRADE_TRANSACTION_DEAL_ADD deal #115800919 DEAL_TYPE_BUY BTCUSD 0.03 lot   

//5 TRADE_TRANSACTION_REQUEST

有没有可能在第一步, TRADE_TRANSACTION_ORDER_ADD  新增订单的时候就把订单拦截下来。

试了在这一步增加条件判断之后,用Trade.OrderDelete(lastOrderID); 不能执行。显示invalid request。


求大神赐教。

只要可以满足需求就可以。不一定在那一步就拦截订单。有别的什么好的取消订单、拦截订单的方法都可以。

谢谢

手动开单的话,只要你的保证金足够,你想开多少订单都可以,EA是无法控制你的手动开单的。EA可以自动控制和限制数量,但是EA控制订单数量之后,只要你的预付款足够,仍然还是可以通过手动随意追加订单数量的。当然了,你也可以通过EA关掉和删除掉你手动多开出来的持仓单和订单。
 
ThrallOtaku #:

我是手动开单不是ea开单,希望通过ea 来控制日内的开单数量。

ea是一个风控的作用。

订单发出去不能拦截,有没有可能我一开单就能拿到订单号,然后ea平仓呢?

1/.EA只能控制EA開的單

你的方案 除非用的是半自動EA 手動觸發EA開單 這樣才能透過EA來控制單量

當然 你另外手動再介入開單的話 EA仍控制不了你先開的單


2/. 你的動作沒說明清楚 可以是有持倉EA就自動馬上平倉

交易的動作是 1.下開單指令 2.平台接受指定 3.平台進行交易 4.平台回覆交易結果(交易成功返回單號 交易失敗返回代碼)

這個一來一往都要時間的 要看你跟平台的連接速度

如果你想做毫秒級以上的極速交易 需要另外找VPS 

 
ThrallOtaku #:

我是手动开单不是ea开单,希望通过ea 来控制日内的开单数量。

ea是一个风控的作用。

订单发出去不能拦截,有没有可能我一开单就能拿到订单号,然后ea平仓呢?

有没有可能我一开单就能拿到订单号,然后ea平仓呢? ——这个完全可以实现。前久给他们写了一个除了立即平掉当前开仓还带些提示啥的。有需要可以留言。

 

OnTradeTransaction()函数是交易完后,如果交易在onticke,是整个onticke运行完后才到这个 OnTradeTransaction(),所以无法拦截

你要控制下单量不是很简单么,获取当前订单量,然后小于5再开就好了。

 
类似问题,以前有相关的帖子专门论述过,管住手的解决方式很多,用交易面板方式,用实盘跟单demo的方式,手机下单利用vps方式,等等,你自己找一下
 
Tiecheng Fu #:
类似问题,以前有相关的帖子专门论述过,管住手的解决方式很多,用交易面板方式,用实盘跟单demo的方式,手机下单利用vps方式,等等,你自己找一下

谢谢。。。

已经解决了。虽然不是很完美。

ea 的ontradeTransaction里面判断当前下单是否是overTrade。记录下来订单号给全局变量。

ontick里面扫到这个订单号就强平,然后发通知。


手机下单用vps 是什么方法。。。。这个有点迷惑。。。