[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 46

[Excluído]  
bool exit_for=false;
double max_1=0;
double max_2=0;
for(int k=0; k<Bars; k++)
{
	if(	iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k)<iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1)
		&& iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1)>iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+2) 	)
	{
		//Если это первый максимум:
		if( max_1==0)
			max_1=iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1);//Записываем номер бара экстремума
		else
		//Если первый найден, записываем второй
		{	
                        max_2=iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1);
                        exit_for=true;
                } 
	}
        //Выход из цикла, когда найдены оба максимума
        if( exit_for==true) k=Bars+1;  
}
Boa tarde . Por favor, informe. Para minha pergunta sobre a comparação dos tops com o RSI depois de seu valor exceder 70, foi-me perguntado esta solução (código acima)

Não funciona assim. Como resultado, eu percebo que procuro por máximos na história (encontra máximos no dia anterior), mas preciso esperar pelo cumprimento depois que esta função entrar em ação (como valor na 1ª barra > 70) ... Se esta condição for cumprida (não antes da barra > 70, mas depois) a primeira massa é menor que a segunda, então o pedido é fechado

Quaisquer dicas sobre o que mudar.

Obrigado
 
xruss писал(а) >>

mais uma pergunta - nos ajude)

como determinar, após um pedido ter sido selecionado do histórico, seu tipo (o pedido foi fechado por Compra ou Venda)?

// ищем самый последний закрытый ордер
for( i=OrdersHistoryTotal(); i>=0; i--){
  if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()== MagicNumber){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()> time){
            time  =OrderCloseTime();
            tikcet=OrderTicket();
            profit=OrderProfit();
            type  =OrderType(); <-----
          }
        }
      }
    }
  }
}
[Deleted]  
Roger >> :
Você tem uma variável declarada e depois tenta usar outra.

Bem, você deveria ter dito isso imediatamente........... senão a velhice não é divertida - mas a juventude é desagradável.....

>> >>SPASSYBOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

Você poderia, por favor, informar
Eu preciso entender claramente se um pedido fechado em stop ou profit
Eu fiz as variáveis priceprofitbuy e pricetopbuy
antes de fazer o pedido, eu faço pricebuy = Ask, então o pedido é submetido a pricebuy, se bem sucedido, então alertar e lembrar priceprofitbuy e pricetopbuy, baseado em pricebuy
condições adicionais priceprofitbuy >= Bid= Licitação e preçostopbuy <= Licitação, eu verifico se o pedido está fechado com lucro ou stop
; no entanto, às vezes a licitação atingiu o nível takeprofit e o pedido está fechado, mas enquanto o loop atinge a priceprofitbuy >= Licitação, a licitação se tornou mais baixa, e o loop não funciona corretamente

Pergunta - há alguma maneira de detectar claramente que o pedido fechou com lucro?
Eu tentei atribuir uma variável ao número do bilhete do pedido e depois verificar o lucro no histórico, mas o pedido não pode ser selecionado do bilhete - apenas o lucro é mostrado no histórico.

 
gramp >> :

Eu fiz as variáveis de preço de compra e preço de compra
Eu coloco pricebuy = Perguntar antes de fazer um pedido, depois enviar pedido por pricebuy; se bem sucedido, alertar e armazenar priceprofitbuy e preçostopbuy com base em pricebuy
então usando o preço de compra >= Licitação e preçostopbuy <= Condição de licitação, eu verifico se a ordem está fechada com lucro ou parada
no entanto, acontece que a licitação atingiu o nível de takeprofit, a ordem é fechada, mas enquanto o ciclo atingiu o preço de compra >= Licitação, a licitação se tornou mais baixa e então o ciclo não funciona corretamente

Pergunta - há alguma maneira de detectar claramente que a ordem foi fechada com lucro?
Tentei definir o número do bilhete para uma variável e depois verificar o lucro no histórico, mas a ordem não pode ser selecionada a partir do histórico - apenas o posto é mostrado no histórico.

Não é muito correto:

Uma posição pode abrir com um deslize (geralmente a um preço pior) em vez do preço exato.

Seria mais correto determinar o preço do pedido aberto usando a função OrderOpenPrice(), tendo-o selecionado previamente usando OrderSelect(...).

Ou, após seu fechamento, calcular a diferença entre o preço de abertura e fechamento. Este último é determinado pela função OrderClosePrice().

OrderType() devolverá seu tipo (compra/venda).

[Excluído]  

Ao xrust: Muito obrigado.


Somente não é claro como soletrar em condições comerciais que se o tipo de ordem fechada era OP_BUY, então blá blá (

Tenho-o assim:


int ORDtype;
// ищем самый последний закрытый ордер
for( i=OrdersHistoryTotal(); i>=0; i--){
  if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()== MagicNumber){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()> time){
            time  =OrderCloseTime();
            tikcet=OrderTicket();
            profit=OrderProfit();
            ORDtype  =OrderType(); <-----
          }
        }
      }
    }
  }
}
// торг условия
if(ORDtype=1)&&....

Na condição que escrevi corretamente que se o tipo de ordem era OP_BUY então blá blá blá blá?

 
xruss >> :

if(ORDtype=1)&&....

Eu escrevi corretamente na condição de que se o tipo de pedido fosse OP_BUY então blablabla?

Deveria ser:

if(ORDtype===1)&&....

[Excluído]  
Everlost >> :

Deveria ser:

if(ORDtype===1)&&....

fa se não houver histórico - no meu caso ORDtype ==0?

 
xruss >> :

Se não há histórico - no meu caso ORDtype ==0?

Será igual ao valor especificado ao declarar a variável, ou seja, 0 no seu caso, porque nenhum valor foi explicitamente atribuído a ela. A propósito, eu não tinha notado em seu post anterior que você queria selecionar a ordem OP_BUY - esta constante é 0, enquanto 1 é OP_SELL. Portanto, é melhor declarar a variável ORDtype com valor -1:

int ORDtype=-1;

Para evitar confusão sobre qual valor corresponde a qual tipo de operação, você também pode especificá-lo em condição:


if (ORDtype==OP_BUY) ...

[Excluído]  
Everlost >> :

Ele será igual ao valor especificado quando a variável foi declarada, ou seja, no seu caso 0, já que não houve atribuição explícita de um valor a ela. A propósito, eu não notei em seu post anterior que você queria selecionar a ordem OP_BUY - esta constante é exatamente 0, enquanto 1 é OP_SELL. Portanto, é melhor declarar a variável ORDtype com valor -1:

int ORDtype=-1;

Para evitar confusão sobre qual valor corresponde a qual tipo de operação, você também pode especificá-lo em condição:


if (ORDtype==OP_BUY) ...

e se houvesse uma ordem de venda na história e então o Expert Advisor a fechasse (no tipo de história ela (seu fechamento) é exibida como t/p ou s/l - não será considerada como a última? não poderia alcançar o efeito desejado((