多币种顾问问题 - 页 11

 
Vinin >> :

创建两个数组。一个是按票号,第二个是按价格。然后按价格对数组进行排序,同时移动票号(不中断连接)。然后在阵列的一端将是最低价格,在另一端是最高价格。现在我们必须改变其中一个极端的命令。

>> 谢谢你。
我还没有实际操作过数组。
假设,例如,我有10个BUYSTOP订单。我设定了他们的设置价格。

double price1 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 1);//цена 1 байстоп
double price2 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 2);//цена 2 байстоп
double price3 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 3);//цена 3 байстоп
double price4 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 4);//цена 4 байстоп
double price5 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 5);//цена 5 байстоп
double price6 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 6);//цена 6 байстоп
double price7 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 7);//цена 7 байстоп
double price8 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 8);//цена 8 байстоп
double price9 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 9);//цена 9 байстоп
double price10= GetOrderOpenPrice(NULL,OP_BUYSTOP, 10);//цена 10 байстоп



然后,我设置了一个设置价格的数组,其中订单1是最接近当前价格的价格。

int ArrayCents = { price1, price2, price3, price4, price5, price6, price7, price8, price9, price10 }

而如何按票据创建一个数组,我也不清楚。我在哪里可以得到订购票?

 

像这样的东西是什么

// Функция возвращает номер тикета ордера с самой маленькой ценой или с самой большой
// По умолчанию сортировка по возрастанию
// Только вот что за цену брать, я возьму стоп (цену открытия мы менять не можем)
int MiniMaxOrderPrice(string lSymbol="", int lMagic=-1, int lOP=-1, int reversi=0){
   double   ArrayPrice[];
   int      ArrayTicket[];
   int      Total=OrdersTotal();
   int      tmpTicket;
   double   tmpPrice;
   bool     bSort=true;
   
   ArrayResize( ArrayPrice, Total);
   ArrayResize( ArrayTicket, Total);
   int i, count=0;
   for ( i=0; i< Total; i++) {
      if (!OrderSelect( i, SELECT_BY_POS))             continue;
      if (!(OrderSymbol()== lSymbol || lSymbol==""))   continue;
      if (!(OrderMagicNumber()== lMagic || lMagic==-1))continue;
      if (!(OrderType()== lOP || lOP==-1))             continue;
      ArrayPrice[ count]=OrderStopLoss();
      ArrayTicket[ count]=OrderTicket();
      count++;
   }
   
   
   if ( count>0) {
      ArrayResize( ArrayPrice, count);
      ArrayResize( ArrayTicket, count);
      while ( bSort) {
         bSort=false;
         for ( i=1; i< count; i++) {
            if ( ArrayPrice[ i-1]> ArrayPrice[ i]) {
               tmpPrice= ArrayPrice[ i-1];
               ArrayPrice[ i-1]= ArrayPrice[ i];
               ArrayPrice[ i]= tmpPrice;
               tmpTicket= ArrayTicket[ i-1];
               ArrayTicket[ i-1]= ArrayTicket[ i];
               ArrayTicket[ i]= tmpTicket;
               bSort=true;
            }
         }
      }
      if ( reversi==0) return( ArrayTicket[0]); else return( ArrayTicket[ count-1]);
   }
   return(-1);
}

   
没有检查代码。
 
谢谢你,维宁 !我会研究的。
 

显然,功能是这样工作的。

MiniMaxOrderPrice(string lSymbol="", int lMagic=-1, int lOP=-1, int reversi=0)

参数:
lSymbol= - 符号名称("" - 任何符号,NULL - 当前符号)

lOP=-1 - 操作(-1 - 任何顺序,在我们的例子中是-OP_BUYSTOP )
lMagic=-1 - 魔术师(-1 - 任何魔术师)。

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

但 "int reversi=0 "是什么意思--我不太清楚!"。

该函数被正常复制了。

0 - 最低价格

1-最大的?


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

还有,--我们到底为什么要把止损作为一个价格?

还有,为什么我们不能改变开盘价?

OP_BUYSTOP - 因为这些是挂单(而不是头寸),只是事件的最终结果是改变特定订单的开盘(触发)价格。

 
rid писал(а)>>

显然,功能是这样工作的。

MiniMaxOrderPrice(string lSymbol="", int lMagic=-1, int lOP=-1, int reversi=0)

参数。
lSymbol= - 仪器名称("-任何符号,NULL-当前符号)。

lOP=-1-操作(-1-任何顺序,在我们的例子中是-OP_BUYSTOP)。
lMagic=-1 - MagicNumber (-1 - 任何魔力)

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

但 "int reversi=0 "是什么意思--我不太清楚!"。

该函数被正常复制了。

0--最小的价格

1-最大的?


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

还有,--我们到底为什么要把止损作为一个价格?

而我们为什么不能改变开盘价呢?

OP_BUYSTOP - 这些是挂单(而不是头寸),这意味着最后我们必须改变所选订单的开盘价。

因此,你需要什么价格就拿什么价格。挂单的公开价格。我只是把它作为一个例子。

 

我认为建立一个二维数组并按第一维排序会更容易。而在那里,相应地,你可以储存你需要的东西。在你的情况下,价格。

double Price_Ticket[][2]
int total=OrdersTotal();
ArrayResize( Price_Ticket, total);
for (int i=0; i< total; i++) if (OrderSelect( i, SELECT_BY_POS))
{
 Price_Ticket[ i][0]=OrderOpenPrice();
 Price_Ticket[ i][1]=OrderTicket();
}
ArraySort( Price_Ticket);
 
Xupypr >> :

我认为建立一个二维数组并按第一维排序会更容易。而在那里,相应地,你可以储存你需要的东西。在你的情况下,它是价格。

   SetIndexBuffer(0, Test);
   SetIndexStyle(0, DRAW_HISTOGRAM);
//---- indicators
//----

   double Price_Ticket[][2];
   
   int size = 10;
   ArrayResize( Price_Ticket, size);
它是在inite中。火鸡刚刚挂起来。启动函数是空的,建立220。
 
Vinin >> :

因此,你想要什么价格就拿什么价格。对于吊坠,采取开盘价。我只是把它作为一个例子。

假设我设置了10个补仓单。它们不是按顺序设置的,而是按时间分开的。

我需要删除目前离当前价格最远的那个订单。

这是找这个订单的正确方法吗?-

//******************************

p.s.

我已经在评论中插入了一个函数。

评论( MiniMaxOrderPrice(NULL, -1, OP_BUYSTOP, 1 ) 。

但它一直返回"-1"。虽然图表上有5到10个订单。

有一个错误的地方...

// Функция возвращает номер тикета ордера с  с самой
// малой или , int reversi=0,большой ценой
// По умолчанию сортировка по возрастанию


int MiniMaxOrderPrice(string lSymbol="", int lMagic=-1, int lOP=-1, int reversi=0 ){
   double   ArrayPrice[];
   int      ArrayTicket[];
   int      Total=OrdersTotal();
   int      tmpTicket;
   double   tmpPrice;
   bool     bSort=true;
   
   ArrayResize( ArrayPrice, Total);
   ArrayResize( ArrayTicket, Total);
   int i, count=0;
   for ( i=0; i< Total; i++) {
      if (!OrderSelect( i, SELECT_BY_TICKET, MODE_TRADES))     continue;
      if (!(OrderSymbol()== lSymbol || lSymbol==""))   continue;
      if (!(OrderMagicNumber()== lMagic || lMagic==-1))continue;
      if (!(OrderType()== lOP || lOP==-1))             continue;
      ArrayPrice[ count]= OrderOpenPrice();
      ArrayTicket[ count]=OrderTicket();
      count++;
   }
   
   
   if ( count>0) {
      ArrayResize( ArrayPrice, count);
      ArrayResize( ArrayTicket, count);
      while ( bSort) {
         bSort=false;
         for ( i=1; i< count; i++) {
            if ( ArrayPrice[ i-1]> ArrayPrice[ i]) {
               tmpPrice= ArrayPrice[ i-1];
               ArrayPrice[ i-1]= ArrayPrice[ i];
               ArrayPrice[ i]= tmpPrice;
               tmpTicket= ArrayTicket[ i-1];
               ArrayTicket[ i-1]= ArrayTicket[ i];
               ArrayTicket[ i]= tmpTicket;
               bSort=true;
            }
         }
      }
      if ( reversi==0) return( ArrayTicket[0]); else return( ArrayTicket[ count-1]);
   }
   return(-1); }
 
rid писал(а)>>

比方说,我设置了10个补仓单。它们不是按顺序放置的,而是按时间分开的。

我需要删除目前离当前价格最远的订单。

这是找这个订单的正确方法吗?-

//******************************

p.s.

我把功能放在评论中。

评论( MiniMaxOrderPrice(NULL, -1, OP_BUYSTOP, 1 )。

但该函数不断返回"-1"。虽然图表上有5到10个订单。

某处有一个错误...

Comment( MiniMaxOrderPrice("", -1, OP_BUYSTOP, 1 )); // 任何符号。

Comment( MiniMaxOrderPrice(Symbol(), -1, OP_BUYSTOP, 1 )); // 当前符号

 

好的!谢谢你,Vinin !

这个功能似乎在起作用!我将进一步研究!