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

 
Vitaly Muzichenko:
Você coloca os preços de uma só vez, ou você os recebe e depois os coloca no cálculo?
Vitaly Muzichenko:
Você fixa os preços de uma vez, ou os obtém e depois os cola nos cálculos?
int k=período;
for(int i=1; i<=período; i++)
{
H1_Close[i]=Close[k];
k--;
}
Eu pego um pedaço de timesession igual ao período que começa na última barra fechada e viro-o na matriz, porque 1 é a penúltima barra em timesession e o cálculo deve começar a partir do i-ésimo
ou seja, minha função deve retornar o valor SMMA da última barra fechada.
 
Boa tarde a todos.
O código abaixo codifica uma idéia simples.
Se o último pedido fechado fosse na SEL
Se a última ordem fechada foi na NEL
Abrir uma ordem NEL
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                            
if ( OrderType ()==OP_SELL)                                            
X = OrderProfit( );                                            

if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                            
if ( OrderType ()==OP_BUY)                                              
if(X < 0)                                              

OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"17-10",123 );



PERGUNTA
Que construção lingüística pode ser usada para adicionar mais duas condições a este código (circulado em vermelho)

Se a última ordem fechada for NEL
Se o último pedido da CEL for encerrado
Se a última ordem fechada tiver sido fechada na NEL
Se o último pedido fechado foi fechado em umSL

Obrigado por sua ajuda.


Eu ficaria muito grato se você pudesse escrever o código e não apenas explicar o que tem que ser feito.
 
Olá. Estou escrevendo um roteiro para apagar todas as ordens pendentes. No entanto, ele elimina apenas um pedido. Tenho sempre duas ordens pendentes ou uma. Em ambos os casos, ele só elimina uma parada de compra. Para excluir Sell Stop você tem que executar o script novamente, desde que não haja outras ordens de Buy Stop. Favor informar onde está o erro.

ordens de exclusão nulas()
{
int Total=OrdensTotal();
for(int i=0;i<Total;i++)
if(OrderSelect(i,SELECT_BY_POS))
{
int type=OrderType(), ticket=OrderTicket();
bool c;
interruptor(tipo)
{
caso 4:
c=OrderDelete(bilhete);
se(!c)
Print(GetLastError());
pausa;
caso 5:
c=OrderDelete(bilhete);
se(!c)
Print(GetLastError());
pausa;
}
}
}
 
0B53RV3R:
Olá. Estou escrevendo um roteiro para apagar todas as ordens pendentes. No entanto, ele elimina apenas um pedido. Tenho sempre duas ordens pendentes ou uma. Em ambos os casos, ele só elimina uma parada de compra. Para excluir Sell Stop você tem que executar o script novamente, desde que não haja outras ordens de Buy Stop. Favor informar onde o erro está localizado.

ordens de exclusão nulas()
{
int Total=OrdensTotal();
for(int i=0;i<Total;i++)
if(OrderSelect(i,SELECT_BY_POS))
{
int type=OrderType(), ticket=OrderTicket();
bool c;
interruptor(tipo)
{
caso 4:
c=OrderDelete(bilhete);
se(!c)
Print(GetLastError());
pausa;
caso 5:
c=OrderDelete(bilhete);
se(!c)
Print(GetLastError());
pausa;
}
}
}
Mude a direção da busca por(i=total-1;i>=0;i--)
 
Maxim Kuznetsov:
mudar a direção da busca por(i=total-1;i>=0;i--)
Obrigado, agora funciona. Estou certo em entender que quando uma ordem com índice 0 é excluída, uma ordem com índice 1 é atribuída ao índice 0, e na próxima iteração i == 1, e tal ordem não existe. Você pode me dizer se este é o caso?
 
0B53RV3R:
Obrigado, agora funciona. Entendo corretamente que quando uma ordem com índice 0 é excluída, a uma ordem com índice 1 é atribuído índice 0, e na iteração seguinte i == 1, e nenhuma ordem desse tipo aparece. Você pode dizer se este é o caso?
Certo.
 

Há uma característica fractal personalizável, bem, isso é terrivelmente pesado. Deixei o desenho dos objetos apenas para mostrar visualmente se os fractais estão se formando corretamente - ele não estará lá.

Pergunta: como podemos facilitar isso, porque os testes visuais são estúpidos:

extern int FrLeft=15; // Баров слева
extern int FrRight=5; // Баров справа

//-----------------------------------------------------------------------------------------------
void OnTick()
{
int nFrUp= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_UPPER); // Возвращает номер бара
int nFrDn= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_LOWER); // Возвращает номер бара
double FrHigh = High[nFrUp]; // Цена верхнего фрактала
double FrLow  = Low [nFrDn]; // Цена нижнего фрактала

SetArrow("FrUp"+"_"+(string)Time[nFrUp], Time[nFrUp], High[nFrUp], clrDeepSkyBlue, 217, 2, ANCHOR_BOTTOM);
SetArrow("FrDn"+"_"+(string)Time[nFrDn], Time[nFrDn], Low[nFrDn], clrDeepPink, 218, 2, ANCHOR_TOP);

// Comment("Price: ",FrHigh,", Num: ",nFrUp,"\nPrice: ",FrLow,", Num: ",nFrDn);
}

//----------------------------------------------------------------------------------------------+
//---------------------- Возвращает номер бара фрактала (настраиваемый) ------------------------+
//----------------------------------------------------------------------------------------------+
int GetBarFractal(string symb,ENUM_TIMEFRAMES tf=0,int nLeft=2,int nRight=2,int numFr=0,int mode=MODE_UPPER) {
int i=0,cn=0,pos=0,r=0,l=0,e=0,equals,bars;
double _high[], _low[];
nLeft=nLeft<=2?2:nLeft;
nRight=nRight<=2?2:nRight;
equals=nLeft+nRight;
bars=Bars(symb,tf)-equals;
ArraySetAsSeries(_high,true);
ArraySetAsSeries(_low,true);

  for(pos=nRight+1; pos<bars; pos++) {
   r=nRight;
   if(mode==MODE_UPPER) {
    CopyHigh(symb,tf,0,pos+equals+1,_high);
    for(i=1; i<=r; i++) {
     if(_high[pos]<=_high[pos-i]) break;
   }}
   if(mode==MODE_LOWER) {
    CopyLow(symb,tf,0,pos+equals+1,_low);
    for(i=1; i<=r; i++) {
     if(_low[pos]>=_low[pos-i]) break;
   }}
   //--
   if(i==r+1) {
    l=nLeft;
    e=equals;
     for(int j=1; j<=l+equals; j++) {
      if(mode==MODE_UPPER) {
       if(_high[pos]<_high[pos+j])  break;
       if(_high[pos]>_high[pos+j])  l--;
       if(_high[pos]==_high[pos+j]) e--;
      }
      if(mode==MODE_LOWER) {
       if(_low[pos]>_low[pos+j])  break;
       if(_low[pos]<_low[pos+j])  l--;
       if(_low[pos]==_low[pos+j]) e--;
      }
      if(l==0) {
       cn++;
       if(cn>numFr) return(pos);
      }
      //--
      if(e<0) break;
   }}
  }
   Print(__FUNCTION__": Фрактал не найден");
  return(0);
}

//----------------------------------------------------------------------------------------------+
//------------------- Функция рисования значка на графике, объект OBJ_ARROW --------------------+
//----------------------------------------------------------------------------------------------+
void SetArrow(string nm="", datetime t1=0, double p1=0, color col=clrRed,
                                           int code=252, int width=1, int anchor=0) {
if(ObjectFind(0,nm)==-1) {
    ObjectCreate(0,nm,OBJ_ARROW,0,0,0);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
    ObjectSetInteger(0,nm,OBJPROP_ARROWCODE,code);
    ObjectSetInteger(0,nm,OBJPROP_ANCHOR,anchor);
    ObjectSetInteger(0,nm,OBJPROP_WIDTH,width);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,false);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetDouble(0,nm,OBJPROP_PRICE,p1);
    ObjectSetInteger(0,nm,OBJPROP_TIME,t1);
   }
}

Obrigado!

 
Vitaly Muzichenko:

Há uma característica fractal personalizável, bem, isso é terrivelmente pesado. Deixei o desenho dos objetos apenas para mostrar visualmente se os fractais estão se formando corretamente - isso não vai acontecer.

Pergunta: como posso facilitar, porque é estúpido testá-lo visualmente:

Obrigado!

Você só pode facilitar isso transformando tudo isso em um indicador. Mesmo o comentário no canto superior esquerdo do gráfico e especialmente as marcas de posição aberta e fechada, que o próprio testador coloca, estão diminuindo a velocidade dos testes.
 

Olá. Você poderia aconselhar um recém-chegado?

Aqui está um exemplo:

if(Condição1)

if(Condição2)

{

}

senão

{

}

De acordo com o código, o contrário deve se referir a if(condição1) e será executado se a condição1 não for cumprida

Mas na verdade, ela também será executada se a Condição2 não for atendida.

 
Andy-D:

Olá. Você poderia aconselhar um recém-chegado?

Aqui está um exemplo:

if(Condição1)

if(Condição2)

{

}

senão

{

}

De acordo com o código, o contrário deve se referir a if(condição1) e será executado se a condição1 não for cumprida

Mas na verdade, ela será executada se a Condição2 não for satisfeita.


Tenha o hábito de colocar imediatamente o aparelho com a condição

se(Condição)

{

}

A de acordo com sua pergunta

if(Условие1)
   {
       if(Условие2)

        {

        }
    }
   else

    {

    }
Razão: