任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 96

 
Vinin:

你确定你有所有的矫正器。它们在一些地方缺失。这就是为什么你的逻辑是有缺陷的。而最有可能的是,结果并不是你所期望的那样。
维提亚,你离开了吗?很久没有见到你了......
 
artmedia70:
维提亚,你离开了吗?我已经很久没有见过你了......


我今天回家了(几乎是)。
 
Vinin:

今天已经回家了(几乎是)。
我快到家的第二个星期了 :))
 
Vinin:

你确定你有所有的矫正器。它们在一些地方缺失。这就是为什么你的逻辑是有缺陷的。而最有可能的是,结果并不是你所期望的那样。

如果你指的是指标的代码,那里一切正常,指标工作,以箭头的形式给出信号(对于买入/卖出-4和5指标缓冲区)。但当我从专家顾问的指标中 读到这些箭头时,我得到的是无稽之谈。我没有完全提起专家顾问,因为那里的主要内容是了解如何读取信号并进行相应的操作。一般来说,问题出在读取信号上。
 
paladin80:

要在这里正确粘贴代码,首先点击SRC,然后在那里复制代码。

如果我没有理解错的话,在某一时刻,我们必须打开一个 OP_BUYSTOP和一个 OP_SELLSTOP?此刻有任何其他挂单,是否可以接受?例如,有待处理的订单,但在开立新的订单之前,旧的订单应该被删除?



if (hour1 == TimeHour(TimeCurrent()) && minute1 == TimeMinute(TimeCurrent()))// если время подошло то
{
min=Low[iLowest(Symbol(),0,MODE_LOW,6,1)]; // вычисляем минимальную цену последних 6 свечей
max=High[iHighest(Symbol(),0,MODE_HIGH,6,1)]; // вычисляем максимальную цену последних 6 свечей
double volum=max-min;// общий объем локалки последних 6 свечей М5

if ((volum<=n)==true)// если объем свечей меньше или равно n пунктов 
{ 
OrderSend ( Symbol (), OP_BUYSTOP, параметры);// открываем отложенный ордер байстоп
OrderSend ( Symbol (), OP_SELLSTOP, параметры);// открываем отложенный ордер селлстоп
}

if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY)&& OrderTakeProfit()==true) ///если первый открывшийся отложенный ордер закрыт с профитом
{
OrderDelete(1);// удаляем второй открытый отложенный ордер
}

}
bool closeorder;//определим  закрытие ордеров
closeorder=true;

if (closeorder==true)//
{
int hour2 = TimeHour(StrToTime(time2));// вычисляем время закрытия ордеров
int minute2 = TimeMinute(StrToTime(time2));

if (hour2 == TimeHour(TimeCurrent()) && minute2 == TimeMinute(TimeCurrent()))// если время 
{
for(int i=OrdersTotal()-1; i>=0; i--)// определяем количество открытых позиций, и отложенных ордеров и закрываем все возможные позиции, и отложенные ордера
 if (OrderSelect(1,SELECT_BY_POS,MODE_TRADES))break; //определяем место где будем искать ( рабочие позиции)
if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage);// Закрытие ордера бай если такой есть
if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage);//Закрытие ордера селл если такой есть
{
for(int D=OrdersTotal()-1; D>=0; D--)
if (OrderSelect(D,SELECT_BY_TICKET,MODE_TRADES)==true)
if (OrderType()==OP_BUYSTOP ) OrderDelete(D); //удаляем отложенный байстоп
if (OrderType()==OP_SELLSTOP) OrderDelete(D);// удаляем отложенный селлстоп

我已经粘贴了通用代码以使其更加清晰......在一天结束时,我想关闭所有可能的头寸和订单......

,在打开 两个挂单的时候(早上),在此之前没有未结订单或未结头寸,因为它们都必须在晚上的某个时间关闭。我想知道我的全部订单关闭至少是正确的描述? =))))



 
artmedia70:

老实说,我不知道你的函数的逻辑。它是应该删除对象还是建立对象,我不知道。告诉我你想让它做什么,我们来看看哪里的逻辑是错的。然而,如果该函数试图建立一个图形对象但失败了,这意味着它已经存在。你的项目的下一个逻辑步骤是什么?你可以用不同的名字建立一个新的对象(例如,将当前时间添加到对象名称中(TimeToStr(TimeCurrent()))))或者,如果你已经有一个对象,但需要改变它的属性,不要再建立它,只需改变它的属性。然后错误就不会再发生了。

这很简单。最主要的是要知道你想要什么...:)



实际上,这个功能只是视觉上替代了打印,它只是在屏幕上显示所有的东西。它还没有写得很好,但它是有效的。:)我到了那里就会重写。然后你可以思考一下刚才的问题。

顺便说一下,如果你不建立新的对象,而是修改现有对象的属性,那么同样...这将是一个令人头痛的问题。我们的想法是在屏幕上显示最后的N个滩涂。如果我们总是覆盖最外层的对象,我们最终可能只有一个具有特定错误的对象。我可以更进一步,在一个循环中选择我需要的许多对象,然后只重写它们,但可能不值得这样做,因为这个函数只是用来测试的,而且我并不真的厌烦它,因为我已经有太多的事情要做。有一天,我将尝试该函数的代码,并将其带入我的意识中,然后我就可以考虑它了!

 

出现了一个问题。我正在写下面的实验。我有一堆订单,自然是根据某些信号一个接一个地打开。如果最后一个订单被关闭,所有其他市场订单挂单 都应该被关闭,在所有...

当然,一切都可以通过数组来写,但我用的是普通方式。在这里,我们走了。

for (int li_ord=OrdersTotal()-1; li_ord>=0; li_ord--)
   {
      if (!OrderSelect(li_ord,SELECT_BY_POS)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
        
      g_ticket = OrderTicket();
      g_type = OrderType();

      // Закрытие всех ордеров, если последний ордер закрыт
      if (GetLastOrderState() != 0)
      {
          if (g_type > 1)
          {
              DeletePendingOrders(g_ticket);
          }
          else
          {
              CloseMarketOrders(g_ticket);
          }
      }
   }

状况。

 if (GetLastOrderState() != 0)

我们检查最后一个未平仓的订单是否已经平仓!然后我们开始删除挂单并关闭市场订单...


这里是函数本身,所以毫无疑问,它有问题(欢迎批评和评论,甚至更欢迎:)):

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
double GetLastOrderState()
{
   double lastOrderCloseTime = -1,                   // Время закрытия последнего ордера
          lastOrderOpenTime = -1;                     // Время открытия последнего ордера
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
  
      if (lastOrderOpenTime < OrderOpenTime())
      {
          lastOrderOpenTime = OrderOpenTime();
          lastOrderCloseTime = OrderCloseTime();
      }
   }
   
   return (lastOrderCloseTime);
}
 
vovak_85:

如果你说的是指标代码--那里的括号一切正常,指标工作,以箭头的形式给出信号(对于买/卖--4和5个指标缓冲区)。但当我从专家顾问的指标中读到这些箭头时,我得到的是无稽之谈。我没有完全提起专家顾问,因为那里的主要内容是了解如何读取信号并进行相应的操作。一般来说,问题出在读取信号上。
这是你的。
double L_B=iCustom(0,0,"Makedonskii",MM,MP,0,4);

double L_S=iCustom(0,0,"Makedonskii",MM,MP,0,5);

应该是这样的。
double L_B=iCustom(NULL,0,"Makedonskii",MM,MP,4,0);

double L_S=iCustom(NULL,0,"Makedonskii",MM,MP,5,0);
类似这样的事情。
 
hoz:

实际上,该功能只是视觉上的替代打印,但它在屏幕上显示所有内容。它还没有写得很好,但它的作用...:)我到了那里就会重写。然后你可以思考一下刚才的问题。

顺便说一下,如果我们不建立新的对象,而是改变现有对象的属性,那么同样...这将是一个令人头痛的问题。根据想法,我们需要在屏幕上显示最后的N个关节。如果我们总是覆盖最后一个对象,我们最终可能只有一个对象有特定的错误。我可以更进一步,在一个循环中选择我需要的许多对象,然后只重写它们,但可能不值得这样做,因为这个函数只是用来测试的,而且我并不真的厌烦它,因为我已经有太多的事情要做了。有一天,我将尝试该函数的代码,并将其带入我的意识中,然后我就可以考虑它了!

我曾经做过一个函数,在一个空的指示器窗口中显示信息。你可以调整显示的线条的颜色。它已经被调试过了。如果你需要,我可以分享。
 
r772ra:
这是你的:它应该是这样的。
类似这样的情况。

谢谢你的纠正,但算法没有正确工作......