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

 
Roger:
不要从零条开始计算高点和低点,而是从第一条开始,在零条上,买入价不能低于最小值。
即:i=1; ?而让出价和要价不被触及?
 
eugggy:

Min=Bid,变量声明

最大=出价。

____________________________________________________________________________________________

for (i=0;i<=20-1;i++) 打开标准

{
如果(Low[i]<Min)Min=Low[i]。
如果(High[i]>Max)Max=High[i]。

}

如果(................. &&Ask>Max)

{

Opn_B=true; //开放购买

}

如果 (................ &&Bid<Min)

{

Opn_S=true; //打开Sell

}

___________________________________________________________________________________________

我很抱歉它是如此的丑陋--我不得不从记忆中写出来,因为代码不工作,我把它删除了。但你作为一个专业人士,应该是可以理解的(我希望)。

____________________________________________________________________________________________

你太夸奖我了 :))我和你一样是个初学者...

extremumprice.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
extern int  Quant_Bars  =30;                    // Количество баров
bool        OpnBuy      =false,
            OpnSell     =false;
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
   int i;                                       // Номер бара 
   double Minimum=Bid,                          // Минимальная цена
          Maximum=Bid;                          // Максимальная цена
 
   for(i=0;i<=Quant_Bars-1;i++)                 // От нуля (!) до..
     {                                          // ..Quant_Bars-1 (!)
      if (Low[i]< Minimum)                      // Если < известного
         Minimum=Low[i];                        // то оно и будет мин
      if (High[i]> Maximum)                     // Если > известного
         Maximum=High[i];                       // то оно и будет макс
     }
//--------------------------------------------------------------------

   if (iOpen(NULL,0,1)>Maximum)
      {
         OpnBuy =true:
         OpnSell=false;
      }
   if (iOpen(NULL,0,1)<Minimum)
      {
         OpnSell=true;
         OpnBuy =false:
      }   
//-------------------------------------------------------------------
//  А тут код открытия позиций.  if (OpnBuy)  {открываем Бай};
//                               if (OpnSell) {открываем Селл};
// Но обязательно нужно сделать проверку на существование уже открытой позиции,
// иначе они будут открываться на каждом тике пока присутствует сигнал...
   return;                                      // Выход из start()
  }
//--------------------------------------------------------------------
情况是这样的。没有检查,只是当场写了......
 
artmedia70:

因此,逻辑是这样的。

1.用一个神奇的数字设置挂单,比如101,并重置标志,将订单转换为头寸,比如ConvOrd=false。

2.检查是否出现了带有魔法101的位置;如果是,设置转换标志ConvOrd=true。

3.检查ConvOrd的真假,如果ConvOrd==真。
我们检查带有神奇数字101的位置是否存在--如果它丢失了
这意味着它已经被关闭。

{deselect ConvOrd=false; set a new pending one;}.

我认为我们可以不使用旗帜...


我明白这个逻辑,但我不知道如何在代码中实现它。我已经尝试了很多变种,但我没有得到任何结果。我想我是个傻瓜。这就是我在这里写的原因。在第663页,我向你展示了我的代码。如果你有兴趣,请告诉我如何改进它,或者至少告诉我如何改进它。谢谢你。
 
artmedia70,Roger 谢谢你的帮助。我想我明白了,的确,第0条的价格不能低于或高于最低和最高价,我没有想到这一点,并把Ask作为Min变量的一个值加入,现在看来是可行的。Artmedia70,与我相比,大多数人都是专业人士)))。再次感谢。
 
dimon74:
我明白这个逻辑,但我不知道如何在代码中实现它。我已经尝试了很多变种,但我没有得到任何结果。我想我是个傻瓜。这就是我在这里写的原因。在第663页,我向你展示了我的代码。如果你有兴趣,请告诉我如何改进它,或者至少告诉我如何改进它。谢谢你。

试试更简单的方法,当你下一个SellStop订单时,记住TakeProfit值,如果Bid低于这个价格,就把它放在Buy上。
 
Roger:

试试更简单的方法,当你下一个SellStop订单时,记住TakeProfit值,如果Bid低于这个价格,就把它放在Buy上。
谢谢你的提示!我已经试过这个变体,但它不适合我的策略。
 
dimon74:
谢谢你的建议!我已经试过这个选项,但它不适合我的策略。
愿专业人员原谅我,但我还是要给你一个伊戈尔-金的有用功能清单,也许你会自己建立它......:)
附加的文件:
 

我不明白为什么同时有两个锁定的位置。其逻辑是这样的。

当权益达到之前利润的某一百分比时,我们就关闭所有头寸...这可以正常工作...下一步...

如果股权比以前的价值下降了一定的百分比,寻找损失最大的头寸,确定它是谁......购买或出售...

并在相反方向用双拍打开一个锁定位置。然后我们看一下他们的总利润(亏损和锁仓的),只要它变大。

比方说10个点,关闭它们...

从逻辑上讲,应该在下一次打勾时检查股权,如果一切正常,我们继续工作......。如果一切再次正常,我们将不得不寻找下一个傻瓜......

但由于某些原因,它同时打开了两个锁定位置......。和买入和卖出,如果手数是0.1,那么第一次锁仓开出的手数是两倍=0.2。

而第二个人又翻了一番,以0.4手开盘......恭敬地说,如果他们为了太阳下的一席之地而相互争斗,那还有什么鬼地方呢......。:(

我把代码附在后面,也许有人可以用他们的代码戳我。指的是。

//----------------- Закрытие позиций если эквити выросло на N процентов ---------------------------
            
   if (Equ_NEW>=Equ_OLD+EquPerc)                       // Новое эквити больше старого на процент прибыли..
   {                                         
//      ClosePosBySizeLossInCurrency(NULL, -1, -1, 0); // Закрытие всех убыточных позиций
      ClosePosFirstProfit(NULL, -1, -1);           // Закрываем все позиции, сначала прибыльные
      DeleteOrders(NULL, -1, -1);                  // Удаляем ордера
      Equ_NEW=AccountEquity();                     // Запоминаем новое значение эквити
      Equ_OLD=Equ_NEW;                             // и вписываем его в "старое"
      CountClsEQU++;                               // Увеличиваем счётчик кол-ва закрытий для ф-ции вывода информации
      LockBuy51 =true;                             // Разрешаем открытие локирующих
      LockSell51=true;                             // позиций Buy и Sell
      OpnBuy51  =true;                             // и вообще разрешаем открываться
      OpnSell51 =true;                             // в любую сторону... 
   }

//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------
               
   if (Equ_NEW<=Equ_OLD-EquPerc/2)                 // Новое эквити меньше старого на столько-то процентов...
      {                                         
         Trade=false;                              // Запрещаем торговлю
//-------------- Закрытие двух позиций, если ранее был установлен лок на убыточную ------------- 
        
         if (OrderSelect(TicketLoss, SELECT_BY_POS, MODE_TRADES))    // Выбираем убыточную позицию (если её тикет
            {                                                        // ранее был сохранён в TicketLoss)
               double prloss=OrderProfit()+OrderSwap();              // Размер профита убыточной позиции
               int typeloss =OrderType();                            // Тип убыточной позиции
               int mnloss   =OrderMagicNumber();                     // Magic убыточной позиции
            }
         if (OrderSelect(TicketLock, SELECT_BY_POS, MODE_TRADES))    // Выбираем локирующую позицию (если её тикет
            {                                                        // ранее был сохранён в TicketLock)
               double prlock=OrderProfit()+OrderSwap();              // Размер профита локирующей позиции
               int typelock =OrderType();                            // Тип локирующей позиции
            }
         if (prloss+prlock>=10*Point)                                // Если их суммарный профит больше 10 пунктов
            {
                ClosePositions(NULL, typelock, 5100);           // Закрываем локирующую позицию
               ClosePositions(NULL, typeloss, mnloss);         // Закрываем убыточную позицию
            }
//--------------- Поиск убыточной позиции и установка локирующей -------------------------  
       
         double Loss=0;                                        // Последнее значение убытка
         int    i, k=OrdersTotal(), OrdTicket=-1;

         for (i=k-1; i>=0; i--) {                              // Цикл по всем ордерам терминала
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
               if ((OrderProfit()+OrderSwap()<0)) {            // Если профит позиции меньше 0
                  if (Loss>OrderProfit()+OrderSwap()) {        // Если последнее значение убытка больше убытка позиции  
                     Loss=OrderProfit()+OrderSwap();           // Значит тут убыток больше, запоминаем как последнее
                     OrdTicket=i;                              // Запоминаем номер убыточной позиции
                  }
               }
            }
         }
            if (OrdTicket>=0) {
               if (OrderSelect(OrdTicket, SELECT_BY_POS, MODE_TRADES)) {   // Выбираем позицию по тикету
                  TicketLoss=OrdTicket;                                    // Запоминаем как тикет убыточной позы
                  if (OrderType()==OP_BUY)                                 // Если её тип Бай
                     {
                        Magic=5100;                                              // Задаём магик... 
                        New_Comm="Sell_M5_Стратегия_1_Локирующая позиция";       // Задаём комментарий для позиции
                        Lots_New=NormalizeLot(OrderLots()*2, False, NULL);       // Увеличим лот в два раза
                        if (!ExistPositions(NULL, OP_SELL, 5100, 0)){            // Если нет локирующего Sell
                        OpenPosition(NULL,OP_SELL,Lots_New,0,pb-tp*100*po,Magic,New_Comm);} // Открываем локирующий...
                        if (ExistPositions(NULL, OP_SELL, 5100, 0))              // Проверяем, заодно и выбираем её
                              {TicketLock=OrderTicket();}                        // Сохраняем тикет локирующего Sell
                     }
                  if (OrderType()==OP_SELL)
                     {
                        Magic=5100;                                              // Задаём магик... 
                        New_Comm="Buy_M5_Стратегия_1_Локирующая позиция";        // Задаём комментарий для позиции
                        Lots_New=NormalizeLot(OrderLots()*2, False, NULL);       // Увеличим лот в два раза
                        if (!ExistPositions(NULL, OP_BUY, 5100, 0)){             // Если нет локирующего Buy
                        OpenPosition(NULL,OP_BUY,Lots_New,0,pa+tp*100*po,Magic,New_Comm);} // Открываем локирующий...
                        if (ExistPositions(NULL, OP_BUY, 5100, 0))               // Проверяем, заодно и выбираем её
                              {TicketLock=OrderTicket();}                        // Сохраняем тикет локирующего Buy
                     }
               }
            }
         }


//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------

...在某处有一个关节...

 

页码"666" :-)

 
吓人...
原因: