默认分类 2010-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);
![如何找到最后持仓单之困惑 (LastOrder) - 牛在天上飞的日志 - 网 last order 陈奕迅](http://img.aihuau.com/images/01111101/01010223t0141437fcdb47fe056.jpg)
}
//+----------------脚本程序主函数--------------------------------------------------+
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 ) {
...<根据关于被止赢所做的其他内容代码略>
}
*/
====================================================================================================