[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 188
int start()
{
double Price=Ask+300*Point;
double SL=Price-300*Point;
double TP=Price+150*Point;
bool New_Bar;
if (Time[0]) // если образовался новый бар int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP ); // выставить отложенный ордерreturn ;
Fun_New_Bar();
if ( New_Bar==true) // если образовался следующий бар
OrderDelete(Ticket); // удалить отложенный ордер//+------------------------------------------------------------------+void Fun_New_Bar(); //НО ПО ОТНОШЕНИЮ К ЭТОЙ СТРОКЕ КОМПИЛЯТОР ПИШЕТ ОШИБКУ '(' - function definition unexpected
{
staticdatetime New_Time=0;
New_Bar=false;
if( New_Time!==Time[0])
New_Time=Time[0];
New_Bar=true;
}
/* desculpe, eu mudei ligeiramente o posto - para que o Vinin seja legível */
/* desculpe, mudou um pouco o post - para tornar o Vinin legível */
Esta linha
if (Time[0])
meios: "se o tempo da última barra não for zero". Portanto, nem sempre é igual a zero.
Além disso, a variável
bool New_Bar;
é definido dentro da função start(), portanto não será visível dentro de outras funções. Além disso, a Fun_New_Bar() que você tentou definir dentro do corpo start(), você não pode fazê-lo em MQL, todas as funções devem ser declaradas no nível do módulo global. A declaração de New_Bar deve ser colocada lá também.
Além disso, durante uma execução da função start() (se não estiver em loop), não é possível definir a formação da barra e depois esperar pela formação da próxima barra: start() por definição é chamada e termina a cada tick (com nuances, mas em geral é assim).
meios: "se o tempo da última barra não for igual a zero". Portanto, nem sempre é igual a zero.
Obrigado. Mas não entendo onde está o "NÃO" nesta linha. Não igual é indicado pelo símbolo !==.
O que eu quis dizer foi que, assim que a hora de abertura de um novo bar aparece, ou seja, um novo bar aparece, o pedido é aberto.
E este é de fato o código que abre uma ordem na abertura de cada cinco barras
int start()
{
double Price=Open[0]+300*Point;
double SL=Price-300*Point;
double TP=Price+150*Point;
if (Time[0])
int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP );
}
Decidi tomar o que pensava ser um caminho mais simples.
Não para apagar a ordem pendente - mas para colocar uma ordem pendente somente se uma vela de cinco minutos não tiver terminado
Ou seja, o pedido pendente deve ser feito somente quando duas condições forem cumpridas. Se a primeira condição for cumprida
if (Time[0])
- Eu verifiquei, o pedido está pronto.
Como devo estabelecer a segunda condição, ou seja, estabelecer uma ordem pendente somente se 5 minutos ainda não tiverem passado. se (---------- && ?????????)
int start()
{
double Price=Open[0]+300*Point;
double SL=Price-300*Point;
double TP=Price+150*Point;
if (Time[0]&& ????????? )
int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP );
return(0);
}
Sim, e daí?
Há uma série de limitações quando se trabalha em modo de visualização
O que eu fiz de errado!!!!
Eu encontrei esta solução para meu problema
/* desculpe, eu mudei ligeiramente o posto - para que o Vinin seja legível */
O que eu fiz de errado!!!!
Eu encontrei esta solução para meu problema
/* desculpe, mudou um pouco o post - para tornar o Vinin legível */
meios: "se o tempo da última barra não for zero". Portanto, nem sempre é igual a zero.
Além disso, a variável
bool New_Bar;é definido dentro da função start(), portanto não será visível dentro de outras funções. Além disso, a Fun_New_Bar() que você tentou definir dentro do corpo start(), você não pode fazê-lo em MQL, todas as funções devem ser declaradas no nível do módulo global. A declaração de New_Bar deve ser colocada lá também.
Além disso, durante uma execução da função start() (se não estiver em loop), não é possível definir a formação da barra e depois esperar pela formação da próxima barra: start() por definição é chamada e termina a cada tick (com nuances, mas em geral é assim).
Aconselho reler a ajuda e eliminar as lacunas na execução do programa MQL, e ver um exemplo de como escrever um programa em loop, não inclinado também.
Obrigado por sua atenção. Que botão devo apertar para obter o código neste formato?
SRC----------------------------\|/
--------------------------------------- V
Esta linha
meios: "se o tempo da última barra não for igual a zero". Portanto, nem sempre é igual a zero.
Obrigado. Mas não entendo onde está o "NÃO" nesta linha. Não igual é indicado pelo símbolo !==.
O que eu quis dizer foi que, assim que a hora de abertura de um novo bar aparece, ou seja, um novo bar aparece, o pedido é aberto.
E este é de fato o código que abre uma ordem na abertura de cada cinco barras
int start() { double Price=Open[0]+300*Point; double SL=Price-300*Point; double TP=Price+150*Point; if (Time[0]) int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP ); }Decidi tomar o que pensava ser um caminho mais simples.
Não para apagar a ordem pendente - mas para colocar uma ordem pendente somente se uma vela de cinco minutos não tiver terminado
Ou seja, o pedido pendente deve ser feito somente quando duas condições forem cumpridas. Se a primeira condição for cumprida
if (Time[0])- Eu verifiquei, o pedido está pronto.
Como devo estabelecer a segunda condição, ou seja, estabelecer uma ordem pendente somente se 5 minutos ainda não tiverem passado. se (---------- && ?????????)