新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1584

 
Valeriy Yastremskiy:

模块差异。如果没有这个模块,只有顶部区域属于这个条件。

情况应该是这样的,出价低于OpenPrice,没有模块

否则,如果出价高于开价,我们会得到正确的结果。

 
Valeriy Yastremskiy:

模块差异。如果没有该模块,只有顶部区域属于该条件。 |开盘价-出价|>10*_点开盘条件

我不太明白......

你能不能说得更清楚一些......对于初学者来说)

 
MakarFX:

你让我吃惊。


用什么?
 
Alexey Viktorov:
如何?
Alexey Viktorov:

从图片中你可以看到,OpenPrice - Bid不应该超过10*_Point。

但可以更少,包括负

 
MakarFX:

但可以更少,包括负

是的......而你得到的条件是"&&>0"

问题是什么呢?就像这样,还是为了什么?

 
Alexey Viktorov:

是的......而你得到的条件是"&&>0"

问题是什么呢?就像这样,还是为了什么?

我目前正在使用这个定义来进入市场 的时刻

if(Bid < OpenPrice && Bid > OpenPrice-Х*Point)
if(Ask > OpenPrice && Ask < OpenPrice+Х*Point)

我想可能有一种方法可以简化它)

 

帮助优化马丁的一段代码

任务是这样的。

-在停止之后,一个马丁将乘以该地段。

-乘数可以用函数OrdersClose来调整,当它达到一个指定的值时,lot将被重置为起始值。

- 批量不应重置为起始量,而是必须按相反的顺序依次减少。

例如OrdersClose=5, Martin=2, lot=0.01。

我们有这样的序列:0.01; 0.02; 0.04; 0.08; 0.16 (重置) 0.01; 0.01;,,,,

需要:0.01;0.02;0.04;0.08;0.16(重置) 0.16;0.08;0.04;....0,01.

我没有足够的知识来自己解决这个问题。

我已经尝试了不同的组合,但没有达到预期的效果。

double LOT()
{
   int n=0;
   double OL=dLots;
   for (int j = OrdersHistoryTotal()-1; j >= 0; j--)
   {
      if (OrderSelect(j, SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == iMagic)
         {
            if (OrderProfit()<0) 
            {
               if (n==0) OL=NormalizeDouble(OrderLots()*K_Martin,DigitsLot);
               n++;
               if (n>=OrdersClose) {Comment("1");return(dLots);}
            }
            else
            {
               if (n==0) {Comment("2");return(dLots);}
               else {Comment("3");return(OL);}
            }
         }
      }
   }
   return(OL);
}
 
MakarFX:

我目前正在使用这个市场进入 点的定义

我想可能有一种方法可以简化它)

if(Bid < OpenPrice && Bid > OpenPrice-Х*Point)
if(Ask > OpenPrice && Ask < OpenPrice+Х*Point) // цену в середину диапазона ставим

OpenPriceS=OpenPrice-X*Point/2;
if(fabs(Bid-OpenPriceS)>Х*Point){ ....   }

而且阿列克谢说得很对))

Alexey Viktorov:

按条件应该是这样的,出价低于OpenPrice,没有模块

否则,如果出价高于开价,我们会得到正确的结果。

固定的)

是的,正确。没有改变病情。出于习惯。在图片中,Bid是在中间)))),这让人困惑。

但有第二个条件,进入是相同的条件数。

 
законопослушный гражданин:

帮助优化马丁的一段代码

任务是这样的。

-在停止之后,一个马丁将乘以该地段。

-乘数可以用函数OrdersClose来调整,当它达到一个指定的值时,lot将被重置为起始值。

- 批量不应重置为起始量,而是必须按相反的顺序依次减少。

例如OrdersClose=5, Martin=2, lot=0.01。

我们有这样的序列:0.01; 0.02; 0.04; 0.08; 0.16 (复位) 0.01; 0.01;,,,,

需要:0.01;0.02;0.04;0.08;0.16(复位) 0.16;0.08;0.04;....0,01.

我没有足够的知识来自己解决这个问题。

我已经尝试输入不同的组合,但没有达到预期的效果。

//+------------------------------------------------------------------+
//| Расчет лота                                                      |
//+------------------------------------------------------------------+
double Lots()
  {
   double L=0;
   // если последняя закрытая сделка убыточная и лот равен стартовому
   // включаем Мартин
   if(GetInfoLastPos(2)<0&&GetInfoLastPos(1)==Lot) 
     {
      Martin=true;
     }
   // если последняя закрытая сделка убыточная и лот больше или равен максимальному
   // выключаем Мартин
   if(GetInfoLastPos(2)<0&&GetInfoLastPos(1)>=MaxMartinLot)
     {
      Martin=false;
     }
   // если последняя закрытая сделка убыточная и Мартин включен, умножаем лот
   if(Martin==true)
     {
      L=NormalizeDouble(GetInfoLastPos(1)*K_Martin,DigitsLot);
     }
   // если последняя закрытая сделка убыточная и Мартин выключен, делим лот
   if(Martin==false)
     {
      L=NormalizeDouble(GetInfoLastPos(1)/K_Martin,DigitsLot);
     }

   if(L>MAXLOT) L = MAXLOT;
   if(L<MINLOT) L = MINLOT;
   return(L);
  }
//+----------------------------------------------------------------------------+
//|  Функция возвращает по символу и магику                                    |
//|  1 - размер лота последней закрытой позиции                                |
//|  2 - размер профита с учетом комиссии и свопа последней закрытой позиции   |
//|  3 - время последней закрытой позиции                                      |
//+----------------------------------------------------------------------------+
double GetInfoLastPos(int a=1)
  {
   datetime t=0;
   double result=0,l=0,p=0,f=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); l=OrderLots(); p=OrderProfit()+OrderCommission()+OrderSwap();}
              }
           }
        }
     }
   if(a==1) {result=l;} else
   if(a==2) {result=p;} else
   if(a==3) {result=(double)t;}
   else     {result=0;}
   return(result);
  }
 
Valeriy Yastremskiy:

而且阿列克谢说得很对))。

是的,这是正确的。没有改变病情。出于习惯。图片中的Bid在中间,这很让人困惑))

谢谢,但它丝毫没有简化我的代码)

原因: