Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1584

 
Valeriy Yastremskiy:

diferença de módulo. Sem módulo, somente a zona superior cai na condição. | OpenPrice - Bid |> 10*_Ponto condição de abertura

É assim que deve ser a condição, a licitação é inferior ao OpenPrice e sem módulos.

Caso contrário, obteremos o resultado correto se a licitação for superior ao OpenPrice

 
Valeriy Yastremskiy:

diferença de módulo. Sem o módulo somente a zona superior cai na condição. | OpenPrice - Bid |> 10*_Point opening condition

Eu não entendo bem...

Por favor, pode tornar isso mais claro... para um iniciante)

 
MakarFX:

Você me surpreende.


Com o que?
 
Alexey Viktorov:
Como?
Alexey Viktorov:

Pela foto você pode ver que OpenPrice - Bid não deve ser mais do que 10*_Ponto

mas pode ser menos, inclusive negativo

 
MakarFX:

mas pode ser menos, inclusive negativo

Sim... e você obtém a condição com "&& > 0".

Qual é a pergunta? Assim sem mais nem menos, ou por alguma coisa?

 
Alexey Viktorov:

Sim... e você obtém a condição com "&& > 0".

Qual é a pergunta? Assim sem mais nem menos, ou por alguma coisa?

Atualmente estou usando esta definição de momento para entrar no mercado

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

Eu pensei que poderia haver uma maneira de simplificá-lo)

 

Ajude a otimizar um pedaço de código para martin

A tarefa é esta:

-desde a parada, um Martin multiplicará o lote;

-O número de multiplicações pode ser ajustado com a função OrderClose, e quando atingir um valor especificado, o lote será reajustado para o valor inicial;

- o volume do lote não deve ser reajustado para o volume inicial, mas deve ser diminuído seqüencialmente em ordem inversa;

por exemplo OrdersClose=5, Martin=2, lote=0,01:

temos a seqüência: 0,01; 0,02; 0,04; 0,08; 0,16 (reset) 0,01; 0,01;,,,,,,,

necessidade: 0,01; 0,02; 0,04; 0,08; 0,16 (reset) 0,16; 0,08; 0,04; .... 0,01.

Eu mesmo não tenho conhecimentos suficientes para resolver o problema.

Eu tentei combinações diferentes, mas não consegui o efeito desejado.

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:

Estou atualmente utilizando esta definição de ponto de entrada no mercado

Eu pensei que poderia haver uma maneira de simplificá-lo)

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

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

E Alexey tem razão))

Alexey Viktorov:

É assim que deve ser por condição, Lance abaixo do OpenPrice e sem módulos.

Caso contrário, obteremos o resultado correto se a licitação for superior ao OpenPrice

Fixo)

Sim, correto. Não alterou a condição. Por hábito. Confunde uma imagem de que Bid está no meio))))

Mas há uma segunda condição, a entrada é a mesma em número de condições.

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

Ajude a otimizar um pedaço de código para martin

A tarefa é esta:

-desde a parada, um Martin multiplicará o lote;

-O número de multiplicações pode ser ajustado com a função OrderClose, e quando atingir um valor especificado, o lote será reajustado para o valor inicial;

- o volume do lote não deve ser reajustado para o volume inicial, mas deve ser diminuído seqüencialmente em ordem inversa;

por exemplo OrdersClose=5, Martin=2, lote=0,01:

temos a seqüência: 0,01; 0,02; 0,04; 0,08; 0,16 (reset) 0,01; 0,01;,,,,,,,

necessidade: 0,01; 0,02; 0,04; 0,08; 0,16 (reset) 0,16; 0,08; 0,04; .... 0,01.

Eu mesmo não tenho conhecimentos suficientes para resolver o problema.

Eu tentei combinações diferentes, mas não consegui o efeito desejado.

//+------------------------------------------------------------------+
//| Расчет лота                                                      |
//+------------------------------------------------------------------+
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:

E Alexei tem razão))

Sim, é isso mesmo. Não alterou a condição. Por hábito. É confuso na imagem que Bid está no meio))))

Obrigado, mas isso não simplifica de forma alguma meu código)

Razão: