[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 77

 

Olá a todos

Por favor, informe, por que a scoop compra, mas quando as condições estão maduras não fecha a posição

/---- parâmetros de entrada
PerRSI=8;
externo int MagicNamber=77771;
Lotes duplos externos=1,0;
//+------------------------------------------------------------------+
int start()
{
int
cnt, // índice de pedidos
bilhete, // número de identificação do pedido
total; // número de pedidos já abertos
duplo
rsi_0, // Valor. rsi_0 corrente
rsi_1; // Valor. rsi_1 1ª barra
se (Bars<100)
{
Impressão ("barras com menos de 100");
retorno(0);
}
total=OrdensTotal();
if(total<1)
{
rsi_0=iRSI(NULL,0, PerRSI,0,0); // Barra de corrente
rsi_1=iRSI(NULL,0, PerRSI,0,1); // Barra de corrente mais 1

if(rsi_0 < rsi_1 && rsi_0 < 30) // Se a linha tiver ultrapassado 30
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("VENDER pedido aberto : ",OrderOpenPrice())
}
else Print("Error opening SELL order : ",GetLastError()));
retorno(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_BUY && OrderSymbol()==Symbol()) // esta é uma posição aberta? OP_BUY ou OP_SELL
{
if(OrderType()==OP_BUY) // posição longa aberta
{
if(rsi_0 > rsi_1 && rsi_0 > 70) // se a linha tiver ultrapassado os 70
{
OrderClose(OrderTicket(),1,Bid,3,Violet); // posição fechada

retornar(0); // sair
}}}}}}
 
KoZaNOStra >> :

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido de venda aberto : ",OrderOpenPrice())
}


Que diabos é isto? Para que serve o OrderSelect()?


O resto é difícil de entender porque o código é disposto sem travessões e não se pode seguir parênteses - eu não quero estragar minha visão.

 
Como descolorir o gráfico para mostrar o movimento da borda de fuga?
 
anat писал(а) >>

Muito obrigado por toda a sua ajuda! E também para condescender - y. Agora há outro problema. Abrimos, por exemplo, 10 posições de compra. Quando fechamos as posições 1, 2, 3, etc. usando stop ou take, o Expert Advisor começa a comprar, se houver um sinal para comprar. Mas eu preciso que TODAS as ordens sejam fechadas primeiro, e então, quando não houver uma posição aberta, um novo ciclo comercial será iniciado. Em outras palavras, precisamos de um contador. Primeiro as posições abertas para um determinado número, e depois, quando as posições são fechadas, para zero. Gostaria de agradecer antecipadamente.

É exatamente assim que se faz agora. Enquanto houver pelo menos uma ordem em aberto, outra não será aberta. Se você quiser fazer o contrário, você tem que ser mais preciso. Então você tem que escolher - se suas ordens são abertas se há ou não posições abertas.

 

Aqui vai uma pergunta:

Há alguma ferramenta de depuração no MetaTrader?

Por favor, compartilhe suas experiências - como você depura scripts e EAs?

É tudo uma questão de dígitos, parâmetros, visões de algoritmos e assim por diante. Como você pega os bugs no algoritmo?

 
Ryan_ryan >> :

Aqui vai uma pergunta:

Há alguma ferramenta de depuração no MetaTrader?

Por favor, compartilhe suas experiências - como você depura scripts e Expert Advisors?

Se eu precisar fazer a depuração, eu a faço através de Print()

Mas na maioria dos casos, tal necessidade não se faz sentir.

 

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Você pode me dizer por que neste projeto após fechar um pedido "timeout.wav" soa primeiro, "nenhum erro" igual ao número de pedidos a serem fechados (se 2 pedidos forem fechados, "nenhum erro" aparecerá duas vezes, etc.) e depois "money.wav" soa. O engraçado é que isto é apenas para comércios curtos, para comércios longos tudo funciona bem. Quem sabe qual é o truque e como consertá-lo?

 
Dimoncheg писал(а) >>

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Você pode me dizer por que neste projeto após fechar um pedido "timeout.wav" soa primeiro, "no error" igual ao número de pedidos a serem fechados (se 2 pedidos forem fechados, "no error" irá aparecer duas vezes, etc.), e então "money.wav" soa. O engraçado é que isto é apenas para comércios curtos, para comércios longos tudo funciona bem. Quem sabe qual é o truque e como consertá-lo?

O suporte não é depois do primeiro, se fechado?

if(OrderType()==OP_SELLL && OrderMagicNumber()==mnum

Esta linha de alguma forma cai fora.

 
Dimoncheg >> :

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Você pode me dizer por que neste projeto após fechar um pedido "timeout.wav" soa primeiro, "no error" igual ao número de pedidos a serem fechados (se 2 pedidos forem fechados, "no error" irá aparecer duas vezes, etc.), e então "money.wav" soa. O engraçado é que isto é apenas para comércios curtos, para comércios longos tudo funciona bem. Quem sabe qual é o truque e como consertá-lo?


A condição no primeiro operador condicional "se" afeta apenas o próximo operador que o segue (a próxima linha).

Os outros são executados sem que a ordem seja fechada. Isto é, mesmo que não haja comando para fechar a ordem, um dos playounds funcionará.

A maneira correta é esta:

  RefreshRates();
  if(OrderType()==OP_SELL && OrderMagicNumber()== mnum) 
  {
     bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);  
     if ( sellclose) 
        PlaySound("money.wav");
     else 
     {
        Print("Ошибка : ", Error(GetLastError()));
        PlaySound("timeout.wav");  
     }
  }
 
infinum13 >> :

O suporte não está fechado após o primeiro se ????

if(OrderType()==OP_SELLL && OrderMagicNumber()==mnum

Esta linha, de alguma forma, cai fora

Se(OrderType()==OP_SELL && OrderMagicNumber()==mnum, então cai fora, mas trabalha o truque para transações curtas e longas, mas o erro "Sem erro" com som "timeout".o "wav" funciona apenas para comércios curtos, para comércios longos funciona bem, há os mesmos parênteses e tudo é o mesmo