Pergunta para os conhecedores - página 12

 
rid писал(а) >>

Eu não sou realmente um especialista nisto.

Mas a suposição é que se após o primeiro sinal você "pendurar" a bandeira, então deixe-a pendurada.

Mesmo que o primeiro sinal já esteja esgotado!

Então o 2º sinal dará um sinal para abrir sem nenhum problema.

Se entendi bem a pergunta...

Mas a bandeira é uma variável, como eu a entendo, e com um novo tique o programa verá o valor inicial ou recém-calculado da bandeira. Talvez eu tenha entendido mal o que é uma bandeira?

 
MQLBankir >> :

Mas uma bandeira é uma variável, como eu a entendo, e com um novo tique o programa verá o valor inicial ou calculado da bandeira a partir dos novos dados. Talvez eu tenha entendido mal o que é uma bandeira?

Uma bandeira é uma constante booleana que tem um valor verdadeiro ou falso, com uma representação numérica de 1 ou 0, respectivamente.

Se o sinal da condição 1 (como a travessia de 2 rodas) for colocado como verdadeiro, se a travessia ainda não tiver ocorrido, a bandeira permanecerá falsa! Para sua tarefa... pareceria algo parecido com isto :

bool signal1=verdadeiro;

int start()

se (sinal1==falso) {retorno();}

sinal1 ......... tra la get sinal

se (sinal1 ==verdadeiro) //o primeiro sinal aparece

{

sinal2 .............. tra la sinal de recepção

sinal1=falso;

}

algo assim deveria acontecer ))))

oh, como eu estava escrevendo, já estava definido abaixo)

 
MQLBankir >> :

Mas uma bandeira é uma variável, como eu a entendo, e com um novo tique o programa verá o valor inicial ou calculado da bandeira a partir dos novos dados. Talvez eu tenha entendido mal o que é uma bandeira?

Posso acrescentar, que as variáveis declaradas globalmente salvam seus valores.

>> até que sejam alterados à força ou o programa seja fechado.

 

A proteção da bandeira é feita da seguinte forma:

int flag;
int start()
{
 // функция принятия решения и установки флага
 if( flag==1)
  { flag=0;
   // код защищенный от запуска флагом   
  } 
return(0);
}
A propósito
// функция принятия решения и установки флага

pode estar em qualquer lugar, dependendo da idéia do autor, a seqüência de ações muda.

 
Urain писал(а) >>

A proteção da bandeira é feita da seguinte forma:

a propósito

pode estar em qualquer lugar, dependendo da idéia do autor, e muda a seqüência de ações.

>> Obrigado a todos vocês, parece ter descoberto))

 

Boa noite. Os problemas vieram de algum lugar.

Um conselheiro com um martingale.

10 passos. Em cada passo, a posição tem um mágico diferente.

No início, tudo estava funcionando bem. Por vários dias.

No entanto, de repente, não funcionou em absoluto!

A primeira posição abre e imediatamente, no bar seguinte, fecha!

Não está claro o porquê.


E continua e continua. Abre e fecha.

Começou apenas hoje. De repente!

Aqui está o bloco de fechamento:

 //жжжжжжжжжжжж  Закрытие позиций жжжжжжжжжжжжжжжжжжжжжжж
 //(используются ф-и И.Кима
if ( NumberOfPositions(NULL,OP_BUY, -1)>0) {//если есть открытые позиции
// если цена открытия первой позиции меньше текущей цены на тейкпрофит - закрываем её 
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic  )+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic  )>0)  ClosePositions(NULL, OP_BUY, Magic );

// если цена открытия второй  позиции меньше текущей цены на тейкпрофит - закрываем её 
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_2)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_2)>0) ClosePositions(NULL, OP_BUY, Magic_2);

 // если цена открытия след.  позиции меньше текущей цены на тейкпрофит - закрываем всё открытые позиции  
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_3)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_3)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_4)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_4)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_5)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_5)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);   
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_6)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_6)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_7)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_7)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);   
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_8)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_8)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);    
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_9)+ TakeProfit_Buy*Point)<=Bid  && PriceOpenLastPos(NULL, OP_BUY, Magic_9)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);
if ( ( PriceOpenLastPos(NULL, OP_BUY, Magic_10)+ TakeProfit_Buy*Point)<=Bid&& PriceOpenLastPos(NULL, OP_BUY, Magic_10)>0) ClosePosFirstProfit(NULL, OP_BUY, -1);  

 } 

Talvez alguém veja a inexatidão ou erro ? (por preços de posições abertas)

 

rid писал(а) >>

Não está claro o porquê.

Alguém vai ver de repente alguma imprecisão ou erro?

O problema provavelmente não é com este código, mas com a abertura de posições ou o cálculo TakeProfit_Buy. É mais provável que seja este último.

Se ele tocar no testador, Print deve ajudar.

 

Eu não calculo TakeProfit_Buy - Eu apenas o defino em parâmetros externos.

extern int       TakeProfit_Buy=21;

No testador - a mesma merda. Mas em lugares. A princípio, tudo é normal.

E então esta merda aparece. E nem sempre.

Terei que inserir um comentário ou uma impressão...

Além disso. Nunca tentei usar este tipo de magia quando era novato, mas nunca esqueci.

 

Acho que entendi errado. E, é claro, não era de todo onde eu estava inicialmente procurando.

Além do fechamento acima, eu também tenho este:

//----------------------- Закрытие позиций по текй профиту ----------------------------------

if ( NumberOfPositions(NULL,OP_BUY, -1)>0) {// если есть открытые позиции
// если очередная  позиция закрылась по тейкпрофиту , то закрываем
// все остальные позиции  
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_3 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_4 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_5 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}   
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_6 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_7 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}   
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_8 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}    
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_9 ))  { ClosePosFirstProfit(NULL, OP_BUY, -1);}
if ( isCloseLastPosByTake(NULL, OP_BUY, Magic_10))  { ClosePosFirstProfit(NULL, OP_BUY, -1);} 
                                           }

Acontece que a bandeira de função
isCloseLastPosByTake( )//если поза закрылась по тейку - возвращает единицу
após sua execução é igual a 1, mas após todas as outras posições terem sido fechadas ainda é igual a 1 !E é claro, quando a próxima primeira posição com número mágico = número mágico é aberto - é imediatamente fechado !

Só não está claro por que este erro não apareceu durante dois dias ?

//--------------------------------------------------------------

Também. Você pode me aconselhar, - Como posso fazer este bloco funcionar corretamente, afinal de contas?

Em outras palavras, como reiniciar a função éCloseLastPosByTake() depois de fechar todas as posições?

 
rid >> :

Em outras palavras, como posso reiniciar a função isCloseLastPosByTake() depois de todas as posições terem sido fechadas?

Pelo que entendi, o tempo de abertura de uma posição fechada com lucro deve ser maior do que o das pequenas encomendas restantes, acrescente esta condição e tudo será legal.