[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 276

 
BBSL:

如果您說的是ticks,您可以寫代碼保存數據文件,但您需要從ekspert的文件中載入它。仅仅保持电脑运行是否有意义?
我想我应该使用第二个选项。谢谢你,BBSL。
 
artmedia70:

你所做的事情很奇怪...当开仓时,你把票号分配给一个 变量,但你检查另一个 变量...

OrderSend() 在失败的情况下返回-1(减一),当你需要小于 的时候,你检查小于 的情况。

这是第一个吸引你眼球的东西。但我认为你那里有很多有趣的东西......。:)


哦-哈-哈,是的,有很多的乐趣......特别是当你开始检查时))

来吧,再来一次...它是这样的。

我打开订单。

order_id = OrderSend(Symbol(),OP_SELL,1.0,Bid,3,0,0,"expert comment",255,0,Red);
   if(order_id<0)
     {
      error=GetLastError();
      Print("send_orders, error = ",ErrorDescription(error));
      return;
     }
     } 

闭幕式。

if(OrderSelect(0, SELECT_BY_POS)==true){

OrderClose(OrderTicket(),1,Bid,3,Red);

}

对,给了一个单子?)

 
hedger:
显然应该使用第二个选项。谢谢你,BBSL。

不客气,我希望它真的能帮助你))。
 
artmedia70:

你所做的事情很奇怪...当开仓时,你把票号分配给一个 变量,但你检查另一个 变量...

OrderSend() 在失败的情况下返回-1(减一),当你需要小于 的时候,你检查小于 的情况。

这是第一个吸引你眼球的东西。但我认为你那里有很多有趣的东西......。:)


我明白了,应该像这样获得tikit号码。

nomer_ticketa = OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,0,"expert comment",255,0,Green);
   if(ticket<1)
 
artmedia70:

你所做的事情很奇怪...当开仓时,你把票号分配给一个 变量,但你检查另一个 变量...

OrderSend() 在失败的情况下返回-1(减一),当你需要小于 的时候,你检查小于 的情况。

这是第一个吸引你眼球的东西。但我认为你那里有很多有趣的东西......。:)


尊敬的,谢谢!))。
 
BBSL:


我明白了,你必须像这样去获得滴答滴答的数字。

你知道,只有一个订单,可能会成功,但如果你还是手动打开,就不一样了。票号应保存在一个变量中,在选择订单 后,我们应将其票号与保存的票号进行比较。

 if (OrderTicket()==number_ticket) {
   // ... код для работы с выбранным ордером при совпадении тикетов
   }

而一般来说,订单的选择必须使用循环中的OrderSelect()函数来完成。

for (i=0; i<OrdersTotal(); i++) {                    // цикл по всем рыночным ордерам терминала
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { // Если выбран любой рыночный ордер с индексом i
      if (OrderSymbol()!=Symbol())     continue;   // Если символ не текущего графика, переходим к выбору следующего ордера
      if (OrderMagicNumber()!=Magic)   continue;   // Если его магик не совпадает с магиком советника - переходим к выбору следующего
//... далее можно проверять другие параметры выбранного ордера, но в этом месте уже есть выбранный ордер текущего графика и номером магика советника
      if (OrderTicket()==number_ticket) {          // проверяем тикет выбранного ордера и, если есть совпадение, выполняем с ним дальнейшие действия
         // ... код, выполняющий дальнейшие действия с найденным нужным ордером ...
         }
      }
   else if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // Иначе, если не удалось выбрать ордер
      Print ("Ошибка при выборе ордера из списка рыночных ордеров = ", GetLastError());  // Выведем сообщение об ошибке и её номер в журнал.
   }

这只是一个供理解的例子,不是完成的工作代码,如果有的话...:)

 
artmedia70:

你知道,如果你只有一个订单,它可能会起作用,但如果你仍然手动打开它,那就不一样了。票据号码应保存在一个变量中,在选择一个订单后,将其票据与存储的票据进行比较。

而且,一般来说,订单的选择应该使用循环中的OrderSelect()函数完成。

这只是一个供理解的例子,而不是完整的工作代码,如果有的话...:)




当关闭订单时,如果有一个以上的订单,我们应该使用这个循环。

int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) {
 //...
 
bolt:

在关闭订单时,如果有一个以上的订单,应该使用这样的循环。

请看我帖子的最后一行。谁说我写了一个例子来结束?

剩下的就是明明白白的事实。编写你自己的教科书。

 

你能告诉我为什么OrderOpenPrice不起作用吗?任务是在池子里寻找某个价格的订单,如果不在那里,就把订单放进去,并标记为被套。


for(int i=1 ; i <= OrdersTotal() ; i++)
   {
   if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES))
      {
      if(OrderOpenPrice() == price) 
        {
        orderset = true;
        }
      }
   }
     
if((orderset==false)
   {
   OrderSend(Symbol(),OP_SELLLIMIT,baselot,price,3,NULL,price-10,"Comment",0001+i,0,White); 
   }
 
Pyro:

你能告诉我为什么OrderOpenPrice不起作用吗?任务是在资金池中搜索以某一价格下的订单,如果不在那里,就下订单,并设置一个标志,表示它已被设置。



我们不能比较实数。