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

 
Figar0 >> :

>> 把所有的代码放出来,这里还没有塞子的味道......

这不是关于止损,而是关于在价格触及MA时立即平仓。

 
Novice писал(а)>>

这与止损点无关,而是在价格触及MA时立即平仓。

就这样吧,是你写的停顿......)但我不明白为什么没有代码就不能工作。 上面这段话的信息量不大。

 
Figar0 >> :

那就这样吧,是你写的止血药......)。同样,如果没有代码,就不可能理解它为什么不工作,所发布的这篇文章完全没有信息。

我一定是表达得非常错误,我道歉,我的意思是MA本身应该作为止损。

>>:

.........价格一触及MA就关闭了头寸


而这些代码是极其原始的。


         Ticket=OrderTicket();                 
         Tip   =OrderType();                   
         Lot   =OrderLots();                   

    MA2C=iMA(NULL,0, Period_MA2,0,MODE_SMA,PRICE_CLOSE,0); //Есть две MA с разным периодом.
    MA3C=iMA(NULL,0, Period_MA3,0,MODE_SMA,PRICE_CLOSE,0); //И вот с такими параметрами.
     
     //Так же есть условия, при которых по идее должны срабатывать 
     // функции закрытия ордеров.
     
     RefreshRates();                  
    if ( Tip==0 && Bid== MA2C)        //Обозначение типа ордера и условия закрытия
     {
      CloseBuy=true;                              // Закрыть Buy
     }
     RefreshRates();
    if ( Tip==0 && Bid== MA3C)
     {
      CloseBuy=true;                              // Закрыть Buy
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA2C)
     {
      CloseSell=true;                               // Закрыть Sell
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA3C)
     {
      CloseSell=true;                               // Закрыть Sell
     }

        // Закрытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if ( Tip==0 && CloseBuy==true)                // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert("Попытка закрыть Buy ", Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         ALERT=OrderClose( Ticket, Lot,Bid,3,Blue);      // Закрытие Buy
         if ( ALERT==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Buy ", Ticket);
            break;                              // Выход из цикла закр
           }
         if ( Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
        if ( Tip==1 && CloseSell==true)                // Открыт ордер Sell..
        {                                       // и есть критерий закр
         Alert("Попытка закрыть Sell ", Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         ALERT=OrderClose( Ticket, Lot,Ask,3,Red);      // Закрытие Sell
         if ( ALERT==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Sell ", Ticket);
            break;                              // Выход из цикла закр
           }
         if ( Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
      break;                                    // Выход из while
     }

我已经认为,4个条件可以改成2个


     RefreshRates();
    if ( Tip==0 && Bid== MA2C || Tip==0 && Bid== MA3C)
     {
      CloseBuy=true;                              // Критерий закр. Buy
     }
     RefreshRates();
    if ( Tip==1 && Ask== MA2C || Tip==1 && Ask== MA3C)
     {
      CloseSell=true;                               // Критерий закр. Sell
     }
 
     RefreshRates();
    if ( Tip==0 && (Bid== MA2C  || Bid== MA3C))
     {
      CloseBuy=true;                              // Критерий закр. Buy
     }
     RefreshRates();
    if ( Tip==1 && (Ask== MA2C ||  Ask== MA3C))
     {
      CloseSell=true;                               // Критерий закр. Sell
     }

然后是这样的)无论如何,这是一个妄想的作品,马车是以投标价格建造的,这样比较......我不知道。

你的代码里有什么东西,OrderSelect 没有看到?

 

这是标准的,来自一本教科书。


Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect( i-1, SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!= Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if ( Total>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }

//И далее как выше...
对我来说,重要的是了解这在原则上是否可行,因为在可视化模式下测试时,订单在MA上没有关闭。
 
Novice писал(а)>>

我想知道原则上是否可以这样做,因为在可视化模式的测试中,订单没有在MA上关闭。

原则上这是可能的。你的系统中只可能有一个订单吗?

尝试将买入/卖出价格和MA值归一化,以实现平等,这是必要的...

你为什么不使用你的专家顾问?如果是我,早就改正了。

 
Figar0 >> :

原则上这是可能的。你的系统中只可能有一个订单吗?

尝试将买入/卖出价格和MA值归一化以实现平等,这是必要的...

你为什么不使用你的专家顾问?我早就想改正了。

在那之后,我的头开始旋转......。

不)对一个圣杯和其他星系一样,只是试图实现和改进TC。


我不能把所有的代码都写进帖子里,所以我附上了

附加的文件:
g.ei.vn.gl..mq4  12 kb
 
Novice писал(а)>>

在那之后,我的头开始旋转......。

不)圣杯就像另一个星系,只是一个实施和改进TC的尝试。

我没能把所有的代码放在这个帖子里,所以我把它粘贴在这里。

但原则上,这在某种程度上是可行的。

我唯一删除的是地段的增加。你不是说订单没有结束吗?

 
他们不在MA上关闭,正是在价格触及他们的时候。关于MA2C和MA3C。关于漫谈,是的,我还没有完成它。


那么如何......?

Figar0 >> :

...在进行平等比较时,将买入/卖出价格和MA值规范化...

我只是不大明白到底该如何正常化...... NormalizeDouble(Ask, Digits) ?

 

这个问题是局部的,我还在想如何让订单在达到MA价格时立即关闭。


在规范化之后,由于某种原因,在编译过程中出现了一个错误,而且是在完全没有触及的那部分代码中。