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

 

Eu não consigo terminar o Expert Advisor. A essência é simples - primeiro desenho um retângulo, que é um gatilho de compra, caso o preço chegue em sua área, depois desenho o segundo - quando o preço chega lá, o negócio deve ser fechado.

Mas acontece o contrário - o preço começa a abrir e fechar dentro da área. O que eu estou fazendo de errado?


//+------------------------------------------------------------------+

//| RECTANGLES OP_BUY.mq4 | RECTANGLES OP_BUY.mq4

//+------------------------------------------------------------------+

#direitos de propriedade intelectual "".

#ligação de propriedade ""

#propriedade versão "1.00"

#propriedade rigorosa


magia int externa = 777701;

Lote duplo externo = 0,01;

Escorregão externo int = 3;



int ticket;

int OrderOfSymbol;




//+------------------------------------------------------------------+

//| Função de inicialização do especialista |

//+------------------------------------------------------------------+

int OnInit()

{

//---

return(INIT_SUCCEED);

}

//+------------------------------------------------------------------+

//| Função de desinicialização especializada |

//+------------------------------------------------------------------+

nulo OnDeinit(const int razão)

{

//---

}

//+------------------------------------------------------------------+

//| função tick expert |

//+------------------------------------------------------------------+

nulo OnTick()

{

//---

//Cheque para um retângulo:

if(ObjectsTotal(OBJ_RECTANGLE)==0)

{Comentário("Desenhe um retângulo para abrir um negócio de compra!");}


// Obter o NOME do retângulo:

for(int n=0;n<ObjectsTotal();n+++)

{

string name=ObjectName(n);

if(ObjectType(name)==OBJ_RECTANGLE)

{

datatime t1a = (datatime) ObjectGet(name,OBJPROP_TIME1);

datatime t2a = (datatime) ObjectGet(name,OBJPROP_TIME2);


double p1a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits);

double p2a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits);

OrderOfSymbol=CounterOrderTradeType(-1);

se (OrderOfSymbol<1)

se (Fechar[1]>Abrir[1])

if(TimeCurrent()>t1a && TimeCurrent()< t2a &&

Licitação < p1a && Licitação > p2a )

{

bilhete = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, 0, 0, "open buy order", Magic, 0, Blue);

}

}

}

//Cheque se já existe um segundoretângulo:

if(ObjectsTotal(OBJ_RECTANGLE)==1)

{Comentário("Desenhe um segundo retângulo para fechar o comércio de compra!");}


// Obter o NOME do retângulo:

for(int n=0;n<ObjectsTotal();n+++)

{

string name=ObjectName(n);

if(ObjectType(name)==OBJ_RECTANGLE)

{

datatime t1b = (datatime) ObjectGet(name,OBJPROP_TIME1);

datatime t2b = (datatime) ObjectGet(name,OBJPROP_TIME2);


double p1b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits);

double p2b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits);


if(TimeCurrent()>t1b && TimeCurrent()< t2b &&

Licitação < p1b && Licitação > p2b )

CloseBuyPositions1();

}

}

//Cheque para ver se já existe um segundo retângulo:

if(ObjectsTotal(OBJ_CHANNEL)==2)

{Comentário("As áreas abertas e fechadas do pedido de compra estão definidas - o comércio está ligado!");}


}

//+------------------------------------------------------------------+

void CloseBuyPositions1()

{

for(int i = OrderTotal() - 1; i >= 0; i--)

if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

if(OrderMagicNumber() == Magic)

if(OrderSymbol() == Símbolo())

{



if(OrderType()==OP_BUY)

{

if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("Order Close");}

}

}

}

//+------------------------------------------------------------------+

//| Contagem de pedidos |

//+------------------------------------------------------------------+

int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)

{

int cnt=0;

//----

for(int pos=OrdensTotal()-1;pos>=0;pos--)

{

if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==falso) continua;

if(OrderSymbol()!=_Symbol) continue;

if(order_type == OrderType() || order_type == -1) cnt++;

}

//----

retorno(cnt);

}

 
Порт-моне тв:

Há uma função para a postagem de código como esta, ela tornará mais fácil para todos lerem seu código para ajudar.

 
MakarFX:

Há uma função para postar código como esta, facilitaria a leitura de seu código por todos para ajudar.

Isso não o ajudará. As linhas em branco só são lidas por pessoas como ele.

 

Порт-моне тв:

O que eu estou fazendo de errado?

Não há nenhuma exclusividade no nome da praça, você tem qualquer praça como condição para comprar e vender

 
Порт-моне тв:

Isto também o ajudará


 

Por favor, informe como corrigir o erro

//+------------------------------------------------------------------+
#property copyright   "Copyright 2020,"
#property version     "1.0"
#property strict

//--- Inputs
int   side_position                    = 1;
input ENUM_BASE_CORNER  CornerInfo     = CORNER_RIGHT_UPPER; 
input ENUM_BASE_CORNER  CornerInfo1    = CORNER_LEFT_UPPER; 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(side_position == 2)
   {
   CornerInfo  = CORNER_RIGHT_LOWER; 
   CornerInfo1 = CORNER_LEFT_LOWER;
   }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+

Aqui está o erro

'CornerInfo' - constant cannot be modified      Wa.mq4  22      1
'CornerInfo1' - constant cannot be modified     Wa.mq4  23      1
2 errors, 0 warnings            3       1
 
Forallf:

Obrigado!

De nada )

MakarFX:

Você pode me dizer como corrigir o erro?

Aqui está um erro

As variáveis de entrada não podem ser alteradas.

Você pode fazer isso assim:

input ENUM_BASE_CORNER  CornerInfo     = CORNER_RIGHT_UPPER; 

ENUM_BASE_CORNER  MyCornerInfo     = CornerInfo; 


.......

if(side_position == 2)
   {
   MyCornerInfo  = CORNER_RIGHT_LOWER; 



 
Aleksei Stepanenko:

De nada )

variáveis de entrada não podem ser alteradas.

Você pode fazer isso assim:

Obrigado. Entendi.

 
MakarFX:

Isto também o ajudará.


Não foi o caso. E percebi que os valores quadrados não são tomados de dois como deveriam ser, mas do último. Eu não sei como vencer isso. Eu não teria descoberto por mim mesmo. Não sou fluente em mql, é por isso que estou lhe pedindo aqui e você está me oferecendo pentes.

 
Порт-моне тв:

não ajudou. E percebi que os valores quadrados não são tomados de dois como deveriam ser, mas do último. Eu não sei como vencer isso. Eu mesmo não teria adivinhado. Não sou fluente em mql, é por isso que estou lhe pedindo, e você está me oferecendo pentes.

Estou lhe oferecendo pentes para tornar seu código fácil de ler para aqueles a quem você se dirige (não há malícia aqui).

Quanto aos quadrados, a fim de identificá-los corretamente, você precisa entender sua origem, ou seja, desenhá-los ou a EA

Razão: