[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
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
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.
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?
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?
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á.
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
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 entradaPerRSI=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
}}}}}}
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.
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?
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?
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.
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:
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