[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 829

 
dimon74:
可能是有用的!!!。尽量以一个价格为基础:说是投标。OP_SELLSTOP 的开盘价将是Bid ,而OP_BUYSTOP 的开盘价是Bid+87*Point (或任何你需要的)。
我看到了这个想法,谢谢你!
 
Vinin:

现在有一个魔术师,参数被设定为

看私人信息...
 

请帮助。也许有人知道如何在代码中实现一个函数,将历史上的倒数第二个值与最后一个值(我们说的是平仓)进行比较,不管是什么值(例如OrderCloseTime()),如果它们不同(在这种情况下,倒数第二个值小于最后一个值)--做一个BLA-BLA-BLA。如果可能的话,请完善我的代码,如果方向不对,也可以自己写。

double C_T_L_C_P() {

datetime t;

double r=0;

int i, k=OrdersHistoryTotal(), q=0;

if (q==0)

for (i=0; i<k; i++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

if (t<OrderCloseTime()) {r=OrderCloseTime();}

}}}

return (r);}

提前感谢!!!。

 

帮助检查。

在循环中出现第一个单元后,检查这个单元是否能保持t+t1时间(每隔delta秒检查一次)。如果它保持不变,我们就买下它,如果在某个时候它没有保持不变,我们就退出循环。换句话说,如果每一个delta间隔都被检查过,并且一直是1,那么这个信号就是有效的。

我的想法正确吗?

if(sign0==1) //проверка начинаертя только после появления 1 
     {
      t=TimeCurrent();                                     //фиксируем время
                                                           //в цикле от t до t+t1 через каждые дельта секунд
       while(t<t+t1)                                       //t1 отрезок времени в перед за которое будем проверять if(sign0==1)
         {
            if(sign0==1)                                   //еще паз проверка наличия  1
              sign1=1;                                    //новой переменой присваиваем 1
            else
              {sign1=0;break;}                             // если нет присваиваем 0 и заканчиваем цикл
            t=t+delta;                                     //проверяем через каждые дельта секунд
         }
      if(sign1==1) op="BUY";
            return;
     }
 
gince:

帮助检查。

在循环中出现第一个单元后,检查这个单元是否能保持t+t1时间(每隔delta秒检查一次)。如果它保持不变,那么我们就买入,如果在某个时刻它没有保持不变,那么我们就退出循环。

我想得对吗?


结果是一个无限的while循环(t总是<t+t1,只有当t1=0时)。在循环中sign1总是=1
 
abolk:

结果是一个无限的while循环(t总是<t+t1,只有当t1=0时)。在循环中sign1总是=1

如何修复这个错误?
 
gince:

如何纠正一个错误?

要修复一个错误,你必须详细说明算法(不是代码,而是算法)。然后将代码叠加在算法上
 
abolk:

为了纠正错误,必须详细说明该算法

收到一个二进制信号0或1。如果收到1,那么从这一刻起,我们开始检查它是否能保持10分钟(600秒),每60秒检查一次。如果10分钟内都有一个1,那么就买入,如果至少有一次没有1,那么就完成检查,并认为没有信号可以打开。
 
gince:

收到一个二进制信号0或1。如果收到1,那么从这一刻起,我们开始检查它是否能保持10分钟(600秒),每60秒检查一次。如果所有的10分钟都是1--买入,如果至少有一次不是1,那么完成检查并认为没有开盘的信号。

代码中不清楚离散信号sign0如何变化。在所提出的代码中,信号并没有改变。有一个不成功的尝试,就是与改变了的T的工作。
 
void CheckForOpen()
  {
   
   int    res;
   datetime t;
   int sign=0;
//---- go trading only for first tiks of new bar


  
  double tr0=iCustom(NULL,0,"trd",0,0);
  double tr1=iCustom(NULL,0,"trd",1,0); 
//---- sell conditions
   if(tr1==1)  
     {
      t=TimeCurrent();
       while(t<t+tim)
         {
            if(tr1==1)
              sign=-1;
            else
              {sign=0;break;}
            t=t+delta;
         }
      if(sign==-1) 
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
      return;
     }
这取自移动平均线.mq4
原因: