失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 如何找到最后持仓单之困惑 (LastOrder) - 牛在天上飞的日志 - 网易博客

如何找到最后持仓单之困惑 (LastOrder) - 牛在天上飞的日志 - 网易博客

时间:2022-12-20 00:38:58

相关推荐

如何找到最后持仓单之困惑 (LastOrder) - 牛在天上飞的日志 - 网易博客

如何找到最后持仓单之困惑 (LastOrder)

默认分类 -06-02 16:43:43 阅读20 评论0 字号:大中小

(未解,待读)

if (OrderSelect(OrdersTotal()-1, SELECT_BY_POS, MODE_TRADES)==True) //按交易中的序号选择第单总数-1个订单

{LastOrder= OrderOpenPrice();} //找到最后单的开仓价

if(OrderSelect(0, SELECT_BY_POS, MODE_TRADES)==True) //按交易中的序号选择0号订单?

{FirstOrder= OrderOpenPrice();} //首个订单开仓价

价差= MathAbs(LastOrder-FirstOrder); //

 

====================================================================================================

int ticket[100];

double price[100];

datetime oot[100];

int count=0;

for(int index = OrdersTotal()-1; index >=0; index--)

if ( OrderSelect(index, SELECT_BY_POS) &&OrderMagicNumber()==MagicNumber &&OrderSymbol()==Symbol() )

{

ticket[count]= OrderTicket();

price[count] = OrderOpenPrice();

oot[count] = OrderOpenTime();

count++;

}

int order[100]; // 插入分类

for (int kk=0; kk<count; kk++) { // Keep ordering ticket[*], price[*] and oot[*]

for (int ii=kk; ii>0 && oot[order[ii-1]] > oot[kk]; ii--)

{ order[ii]=order[ii-1];} // kk oot[kk] order[kk] oot[order[kk]]

// 0 3. 1 1.

order[ii]=kk; // 1 1. 2 2.

} // 2 2. 0 3.

// ticket[order[0]] is the oldest

// ticket[order[count-1]] is the latest

====================================================================================================

[Script] 打印各种订单类型的总数

extern int ExpertMagicNumber=123456;

//+--------------计算所有的订单类型子函数()----------------------------------------------------+

int MyOrdersTotal(int buyNumber, int sellNumber,int buyLimitNumber

,int sellLimitNumber,int buyStopNumber, int sellStopNumber, int MagicNumber=0 ) //

{

int res,

orderType;

//----

buyNumber=0;

sellNumber=0;

buyLimitNumber=0;

sellLimitNumber=0;

buyStopNumber=0;

sellStopNumber=0;

for (int i=OrdersTotal()-1; i>=0; i--)

if (OrderSelect(i, SELECT_BY_POS))

{

if (MagicNumber==0 || (OrderMagicNumber()==MagicNumber && MagicNumber!=0)) //

{

switch(OrderType())

{

case OP_BUY: buyNumber++;break;

case OP_SELL: sellNumber++;break;

case OP_BUYLIMIT: buyLimitNumber++;break;

case OP_SELLLIMIT: sellLimitNumber++;break;

case OP_BUYSTOP: buyStopNumber++;break;

case OP_SELLSTOP: sellStopNumber++;break;

}

}

}

//----

res=buyNumber+sellNumber+buyLimitNumber+sellLimitNumber+buyStopNumber+sellStopNumber;

return(res);

}

//+----------------脚本程序主函数--------------------------------------------------+

int start()

{

int buys, sells, buyLs, sellLs, buySts, sellSts;

if (MyOrdersTotal(buys,sells,buyLs,sellLs,buySts,sellSts,ExpertMagicNumber)>0)

Print("买单=",buys," 卖单=",sells," 限价买单=",buyLs," 限价卖单=",sellLs," 突破价买单=",buySts," 突破价卖单=",sellSts);

return(0);

}

====================================================================================================

被止损或止赢的检查返回结果的程序段

start()

{

OrderEvents(MAGIC); //调用该子函数

...

}

//------------------------------------在历史中分别查找止损单和赢利单 子函数--------------------------------+

void OrderEvents( int magic ) {

static datetime lastCheck;

for( int o = 0; o < OrdersHistoryTotal(); o++ ) {

if( OrderSelect(o, SELECT_BY_POS, MODE_HISTORY)

&& OrderMagicNumber() == magic &&

&& OrderCloseTime() > lastCheck )

if( OrderClosePrice() == OrderStopLoss() ) //(是否忽略了大于小于的情况未知)

OnStopLoss(OrderTicket());

else if( OrderClosePrice() == OrderTakeProfit() ) //(是否忽略了大于小于的情况未知)

OnTakeProfit(OrderTicket());

}

lastCheck = TimeCurrent();

}

//--------------

void OnStopLoss( int ticket )

{

...<do something ........>

}

//---------------

void OnTakeProfit( int ticket )

{

...<do something ........>

}

//==========================================================

/*

start() {

检查订单被止子函数(MAGIC);

if(类型==OP_BUY ||类型==OP_BUYLIMIT||类型==OP_BUYSTOP) OP=买;

if(类型==OP_BUY ||类型==OP_BUYLIMIT||类型==OP_BUYSTOP) OP=卖;

...

}

void 检查订单被止子函数( int 标识符 ) {

static datetime 最后检查时间;

for( int 个 = 0; 个 < OrdersHistoryTotal(); 个++ ) {

if( OrderSelect(个, SELECT_BY_POS, MODE_HISTORY)

&& OrderMagicNumber() == 标识符

&& OrderCloseTime() > 最后检查时间 )

if(OP==买)

if( OrderClosePrice() <= OrderStopLoss() )

被止损价(OrderTicket());

else if( OrderClosePrice() >= OrderTakeProfit() )

被止赢价(OrderTicket());

if(OP==卖)

if( OrderClosePrice() >= OrderTakeProfit() )

被止损价(OrderTicket());

else if( OrderClosePrice() <= OrderStopLoss() )

被止赢价(OrderTicket());

}

最后检查时间 = TimeCurrent();

}

void 被止损价( int ticket ) {

...<根据关于被止损所做的其他内容代码略>

}

void 被止赢价( int ticket ) {

...<根据关于被止赢所做的其他内容代码略>

}

*/

====================================================================================================

如果觉得《如何找到最后持仓单之困惑 (LastOrder) - 牛在天上飞的日志 - 网易博客》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。