quando você inicia seu Metatrader, a EA tem que descobrir se há um comércio aberto
Eu faço apenas a contagem regressiva do loop para verificar o comércio se houver um comércio
Se eu o defino no início em um e OrdensTotal() >0 então eu o faço verificando as negociações if(.......> ||| .......> ){do the loop....
você tem certeza que você me deu o código que lhe deu os resultados mostrados acima? eu o testei no período de 1440 (1 DIA ) e nenhuma negociação foi executada. no entanto, quando eu o mudei para 1M muitas negociações foram executadas
cyxstudio: você tem certeza que você me deu o código que lhe deu os resultados mostrados acima? eu o testei no período de 1440 (1 DIA ) e nenhuma negociação foi executada. no entanto, quando eu o mudei para 1M muitas negociações foram executadas
quantos dias atrás seus dados se você verificar meu teste novamente você encontrará o período do teste e o período de tempo testado em
Como você pode ver este ajuste de turno não existe no RSI... ele exibe em sua própria janela... isso é uma pista.
Se você deixar cair uma média móvel em seu gráfico, você verá o que equivale ao Ma_Shift como uma configuração na caixa de turnos.
Observe também a ordem dos parâmetros 200,8,sma, fechar. são os mesmos quando você chama o indicador
como a ordem em que estão listados na caixa...o NULL e o cronograma são o que você deixar cair o Ma
por isso não são necessários aqui. nem é o último turno... já que esta mãe estará constantemente mudando no
atual candle.... você vai entender isso em um momento.
Se você for e olhar as configurações do indicador iAlligator, você verá as configurações para o deslocamento do maxilar, deslocamento dos dentes e deslocamento dos lábios... esta é a média MaShift de cada uma dessas médias Moving.
todas elas podem ser deslocadas na tabela para a esquerda ou para a direita, como muitas barras você quiser.
que exibe como esta............
Isto faz uma diferença de 3 pip no valor desta vela das 08:00, como mostrado aqui na janela de dados.
O que nos leva à pergunta: Para que serve a configuração "Shift" no final?
Bem, ao passar o mouse sobre seu gráfico com a janela de dados aberta e passar de vela em vela
você verá os números mudarem para os 5 SMA ao passar de vela em vela.
É disso que se trata o último valor SHIFT... tendo em mente que a vela atual que está sendo
vela zero... a última vela completada é a vela 1, portanto, se houver um total de 1000 velas acesas, a última vela completada é a vela 1
sua tabela são numerados para trás a partir de 999 na borda esquerda de sua tabela até 0 onde você
Portanto, se você quiser saber qual era o valor das 5 SMA 5 velas concluídas há
você coloca um 5 nesse último lugar... claro que à medida que o tempo avança... a vela 5 mudará para a próxima vela.
Agora como foi mencionado... se você está sempre recebendo o valor da vela 0... então esse valor é constantmente
mudando com o preço. Portanto, você pode pegar um sinal e então o indicador repintar em você ... mas se você estiver
sempre pedindo as informações da vela 1 é feito e não mudará....
Eu refiz tudo e consertei o loop, o deslizamento, consertei a média móvel e os valores do RSI, certifiquei-me de que todas as posições abertas fossem fechadas antes de começar uma nova posição. mas quando eu volto atrás, nada acontece, nenhuma compra/venda foi executada... qual é o problema com isso novamente?
a função init() só funciona na inicialização e não em cada tic como a função start()... você precisará colocar as médias móveis de volta na função start ao invés de na função init() apenas para que ela funcione para que ela continue recebendo números novos...
Adicione um recurso onde o EA verificará se há alguma ordem pendente antes de decidir abrir uma nova posição. Se houver uma ordem pendente ou aberta, ela não tentará mais abrir.em
vejo que todos usam um loop para verificar se há uma posição aberta antes de comprar, não consigo ver a lógica disso. desde que OrdensTotal seja > 0 há ordens abertas e minha EA não procurará abrir mais posições.
fixou o laço decrescente.
Desta vez me dá OrderClose erro 138 que não pode ser resolvido com a adição de refrescos()
e ainda assim acabo perdendo dinheiro, o que não deveria.
não consigo pensar em mais nada para consertar...
//+------------------------------------------------------------------+//| RSI_strategy_cyxstudio.mq4 |//| Copyright 2013, Tjipke de Vries |//| https://forum.mql4.com/53695/ |//+------------------------------------------------------------------+#property copyright "Copyright 2013, MetaQuotes Software Corp."#property link "http://www.metaquotes.net"externint RSIPeriod = 3; //number of periods for RSIexterndouble UpperBound = 90; //set upper bound value for RSIexterndouble LowerBound = 5; //set lower bound value for RSIexternint MASlowPeriod = 200;
externint MAFastPeriod = 5;
externdouble Lots = 0.1;
externdouble StopLoss = 60; //Set the stop loss levelexterndouble TakeProfit = 120; //Set the take profit levelexterndouble TrailingStop = 40;
//extra settings for OrderSendexternint MagicNumber = 54333;
externstring CommentEA = "RSI strategy";
externint Slippage.Pips = 3;
int BUYS=1,SELLS=1;
//++++ These are adjusted for 5 digit brokers.int pips2points; // slippage 3 pips 3=points 30=pointsdouble pips2dbl; // Stoploss 15 pips 0.015 0.0150intDigits.pips; // DoubleToStr(dbl/pips2dbl, Digits.pips)//---//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
//---- if(Digits % 2 == 1) // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
{pips2dbl = Point*10; pips2points = 10; Digits.pips = 1;}
else {pips2dbl = Point; pips2points = 1; Digits.pips = 0;}
// OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl //---- //----return(0);
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
//----int Ticket;
double SL,TP;
int Total;
double MagicNo;
double Slippage;
double pAsk = MarketInfo(Symbol(), MODE_ASK);
double pBid = MarketInfo(Symbol(), MODE_BID);
double MA200 = iMA(NULL, 0, MASlowPeriod, 0,MODE_SMA,PRICE_CLOSE, 0); //200 day Moving Average double MA5 = iMA(NULL, 0, MAFastPeriod, 0,MODE_SMA,PRICE_CLOSE, 0); // 5 day Moving Averagedouble CurrentRSI = iRSI (NULL, 1440, RSIPeriod,PRICE_CLOSE ,0);
int Ticket2;
int cnt;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (OrdersTotal() == 0 ) {
if (CurrentRSI < LowerBound && pAsk > MA200) { //Condition to execute buy entry
Ticket = OrderSend(Symbol(), OP_BUY, Lots, pAsk, 3, pBid - ( StopLoss * Point ), pAsk + ( TakeProfit * Point ), "Buy.", 111,0,Yellow) ; //execute buy orderif(Ticket>0)
{
if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
if (Ticket < 0) {
Print("Error opening BUY order : ",GetLastError());
return(0);
}
}
if (CurrentRSI > UpperBound && pBid < MA200) { //Condition to execute sell entry
Ticket2 = OrderSend(Symbol(), OP_SELL, Lots, pBid, 3, pAsk + ( StopLoss * Point ), pBid - ( TakeProfit * Point ), "Sell.",000, 0, Yellow) ; //execute sell orderif(Ticket2>0)
{
if(OrderSelect(Ticket2,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
}
if (Ticket2<0) {
Print("Error opening SELL order : ",GetLastError());
return(0);
}
}
}
if (OrdersTotal() > 0 ) {
int PositionIndex; // <-- this variable is the index used for the loopint TotalNumberOfOrders; // <-- this variable will hold the number of orders currently in the Trade pool
TotalNumberOfOrders = OrdersTotal(); // <-- we store the number of Orders in the variablefor(PositionIndex = TotalNumberOfOrders - 1; PositionIndex >= 0 ; PositionIndex --) // <-- for loop to loop through all Orders . . COUNT DOWN TO ZERO !
{
RefreshRates();
if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue; // <-- if the OrderSelect fails advance the loop to the next PositionIndexif( OrderMagicNumber() == MagicNo // <-- does the Order's Magic Number match our EA's magic number ?
&& OrderSymbol() == Symbol() // <-- does the Order's Symbol match the Symbol our EA is working on ?
&& ( OrderType() == OP_BUY // <-- is the Order a Buy Order ?
|| OrderType() == OP_SELL ) ) // <-- or is it a Sell Order ?if (pAsk > MA5){ //condition to close long position
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),pBid,3,Violet); // close long positionreturn(0); // exitif(TrailingStop>0)
{
if(pBid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<pBid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),pBid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
if(pBid < MA5){ //condition to close short position
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),pAsk,3,Violet); // close short positionreturn(0); // exitif(TrailingStop>0)
{
if((OrderOpenPrice()-pAsk)>(Point*TrailingStop))
{
if((OrderStopLoss()>(pAsk+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),pAsk+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), Slippage ) ) // <-- try to close the orderPrint("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() ); // <-- if the Order Close failed print some helpful information
} // end of For loop
}
return(0);
}
Adicione um recurso onde o EA verificará se há alguma ordem pendente antes de decidir abrir uma nova posição. Se houver uma ordem pendente ou aberta, ela não tentará mais abrir.em
vejo que todos usam um loop para verificar se há uma posição aberta antes de comprar, não consigo ver a lógica disso. desde que OrdensTotal seja > 0 há ordens abertas e minha EA não procurará abrir mais posições.
fixou o laço decrescente.
Desta vez me dá OrderClose erro 138 que não pode ser resolvido com a adição de refrescos()
e ainda assim acabo perdendo dinheiro, o que não deveria.
não consigo pensar em mais nada para consertar...
Por que você colocou a lógica para abrir uma compra antes de verificar os negócios que sua EA abriu em sua conta ????
O que vai acontecer agora ???? com a programação que você tem até agora ???
Assumir que você tem uma conta em funcionamento com sua EA. Você abre manualmente uma negociação por GBPUSD.
Quantas negociações são ordensTotal() com essa negociação ????
Seu código.... para COMPRAR
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (OrdersTotal() == 0 ) {
if (CurrentRSI < LowerBound && pAsk > MA200) { //Condition to execute buy entry
Ticket = OrderSend(Symbol(), OP_BUY, Lots, pAsk, 3, pBid - ( StopLoss * Point ), pAsk + ( TakeProfit * Point ), "Buy.", 111,0,Yellow) ; //execute buy orderif(Ticket>0)
{
if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
if (Ticket < 0) {
Print("Error opening BUY order : ",GetLastError());
return(0);
}
o que isso está fazendo agora ???? e por que razão está fazendo isso ????
você foi muito bem ajudado lá(RaptorUK e WHRoeder obrigado pela explicação lá eu acho muito bem feito)
.
Outra pergunta que tenho para você é
Por que você mudou o prazo neste cálculo da Média Móvel
Isto não é o mesmo que eu dei,
Não é calcular o valor correto em outro gráfico Diariamente
.
Portanto, reserve um tempo para aprender e praticar e leia atentamente a ajuda que você recebe aqui neste fórum
ou você paga a alguém para programar para você em um site como Jobs
asordensTotal() devem revelar a quantidade total de ordens pendentes e ordens de mercado, independentemente de terem sido abertas através de EA ou manual?
Eu estava pensando desta forma. Minha EA sempre verificará se há ordens abertas e se houver, ela não abrirá mais ordens e só abrirá novas ordens quando não houver ordens abertas.
if (OrdersTotal() == 0 )
Acho que está funcionando bem porque minha seção de resultados me mostra a seqüência de pedidos 1,1,2,2,3,3,3,4,4, o que significa que um pedido é fechado antes que um novo pedido seja aberto.
as variáveis de média móvel e LER mudaram devido a razões de teste. Eu estava experimentando em um período/período diferente, mas não o mudei quando o coloquei aqui.
e o mais bizarro de todos , meu código SOMENTE executará ordem de compra. nunca executou nem mesmo uma...ordem de venda. isso é simplesmente estranho,
em poucas palavras, os problemas que ainda estou enfrentando agora.
1. ele só executa a compra, mas nunca executa a venda, apesar do fato de eu ter codificado a venda
2. Ainda tendo lucro negativo, o que eu estou confiante que esta estratégia não é suposto.
quando você inicia seu Metatrader, a EA tem que descobrir se há um comércio aberto
Eu faço apenas a contagem regressiva do loop para verificar o comércio se houver um comércio
Se eu o defino no início em um e OrdensTotal() >0 então eu o faço verificando as negociações if(.......> ||| .......> ){do the loop....
você tem certeza que você me deu o código que lhe deu os resultados mostrados acima? eu o testei no período de 1440 (1 DIA ) e nenhuma negociação foi executada. no entanto, quando eu o mudei para 1M muitas negociações foram executadas
OK, aqui vai.....I tentará ajudar aqui se eu puder.
Esta pergunta Ma_Shift é uma pergunta que eu tinha há algum tempo e nunca consegui obter uma resposta clara.
Se você notar em seu código que está usando um turno de 8 em suas médias móveis.... o que isso significa?
Isto faz uma diferença de 3 pip no valor desta vela das 08:00, como mostrado aqui na janela de dados.

O que nos leva à pergunta: Para que serve a configuração "Shift" no final?
Bem, ao passar o mouse sobre seu gráfico com a janela de dados aberta e passar de vela em vela
você verá os números mudarem para os 5 SMA ao passar de vela em vela.
É disso que se trata o último valor SHIFT... tendo em mente que a vela atual que está sendo
vela zero... a última vela completada é a vela 1, portanto, se houver um total de 1000 velas acesas, a última vela completada é a vela 1
sua tabela são numerados para trás a partir de 999 na borda esquerda de sua tabela até 0 onde você
Portanto, se você quiser saber qual era o valor das 5 SMA 5 velas concluídas há
você coloca um 5 nesse último lugar... claro que à medida que o tempo avança... a vela 5 mudará para a próxima vela.
Agora como foi mencionado... se você está sempre recebendo o valor da vela 0... então esse valor é constantmente
mudando com o preço. Portanto, você pode pegar um sinal e então o indicador repintar em você ... mas se você estiver
sempre pedindo as informações da vela 1 é feito e não mudará....
Espero que isto ajude...
Eu refiz tudo e consertei o loop, o deslizamento, consertei a média móvel e os valores do RSI, certifiquei-me de que todas as posições abertas fossem fechadas antes de começar uma nova posição. mas quando eu volto atrás, nada acontece, nenhuma compra/venda foi executada... qual é o problema com isso novamente?
a função init() só funciona na inicialização e não em cada tic como a função start()... você precisará colocar as médias móveis de volta na função start ao invés de na função init() apenas para que ela funcione para que ela continue recebendo números novos...
Retrabalhados
Adicione um recurso onde o EA verificará se há alguma ordem pendente antes de decidir abrir uma nova posição. Se houver uma ordem pendente ou aberta, ela não tentará mais abrir.em
vejo que todos usam um loop para verificar se há uma posição aberta antes de comprar, não consigo ver a lógica disso. desde que OrdensTotal seja > 0 há ordens abertas e minha EA não procurará abrir mais posições.
fixou o laço decrescente.
Desta vez me dá OrderClose erro 138 que não pode ser resolvido com a adição de refrescos()
e ainda assim acabo perdendo dinheiro, o que não deveria.
não consigo pensar em mais nada para consertar...
Retrabalhados
Adicione um recurso onde o EA verificará se há alguma ordem pendente antes de decidir abrir uma nova posição. Se houver uma ordem pendente ou aberta, ela não tentará mais abrir.em
vejo que todos usam um loop para verificar se há uma posição aberta antes de comprar, não consigo ver a lógica disso. desde que OrdensTotal seja > 0 há ordens abertas e minha EA não procurará abrir mais posições.
fixou o laço decrescente.
Desta vez me dá OrderClose erro 138 que não pode ser resolvido com a adição de refrescos()
e ainda assim acabo perdendo dinheiro, o que não deveria.
não consigo pensar em mais nada para consertar...
Por que você colocou a lógica para abrir uma compra antes de verificar os negócios que sua EA abriu em sua conta ????
O que vai acontecer agora ???? com a programação que você tem até agora ???
Assumir que você tem uma conta em funcionamento com sua EA. Você abre manualmente uma negociação por GBPUSD.
Quantas negociações são ordensTotal() com essa negociação ????
Seu código.... para COMPRAR
o que isso está fazendo agora ???? e por que razão está fazendo isso ????
Por que você colocou a lógica para abrir uma compra antes de verificar os negócios que sua EA abriu em sua conta ????
O que vai acontecer agora ???? com a programação que você tem até agora ???
Assumir que você tem uma conta em funcionamento com sua EA. Você abre manualmente uma negociação por GBPUSD.
Quantas negociações são ordensTotal() com essa negociação ????
Seu código.... para COMPRAR
o que isso está fazendo agora ???? e por que razão está fazendo isso ????
comprar somente se as condições de compra tiverem sido cumpridas e se nenhuma posição tiver sido aberta
comprar somente se as condições de compra tiverem sido cumpridas e se nenhuma posição tiver sido aberta
Assumir que você tem uma conta em funcionamento com seu EA. Você abre manualmente uma negociação por GBPUSD.
a condição será verdadeira
você poderia por favor me deixar dar uma olhada em seus códigos?
eu não queria saber por que falhei e como acertá-lo.
.
Sua mensagem para mim eu posso lhe dar o código completo diretamente.....
Isso não será de graça. Para isso você tem que usar a seçãoJobs e pagar para obtê-lo...
Você o receberá então lá
.
Outra maneira é ler bem seus tópicos
Estamos aqui para ajudá-lo a aprender como programá-lo você mesmo. Essa é uma ajuda gratuita
Nós lhe mostramos seus erros e o ajudamos na direção de como resolvê-los.
Eu mostro o código que tenho no momento em que você aprendeu uma maneira de escrevê-lo ....
Não há necessidade de pagar então e você pode comparar esse momento com o código que você fez aqui com a ajuda deste fórum.
....
minha última pergunta aqui ainda não foi respondida
Assumir que você tem uma conta em funcionamento com seu EA. Você abre manualmente uma negociação por GBPUSD.
a condição será verdadeira
.
. Em outro tópicoOrderClose error 138
você foi muito bem ajudado lá(RaptorUK e WHRoeder obrigado pela explicação lá eu acho muito bem feito)
.
Outra pergunta que tenho para você é
Por que você mudou o prazo neste cálculo da Média Móvel
Isto não é o mesmo que eu dei,
Não é calcular o valor correto em outro gráfico Diariamente
.
Portanto, reserve um tempo para aprender e praticar e leia atentamente a ajuda que você recebe aqui neste fórum
ou você paga a alguém para programar para você em um site como Jobs
você poderia por favor me deixar dar uma olhada em seus códigos?
eu não queria saber por que falhei e como acertá-lo.
.
Sua mensagem para mim eu posso lhe dar o código completo diretamente.....
Isso não será de graça. Para isso você tem que usar a seçãoJobs e pagar para obtê-lo...
Você o receberá então lá
.
Outra maneira é ler bem seus tópicos
Estamos aqui para ajudá-lo a aprender como programá-lo você mesmo. Essa é uma ajuda gratuita
Nós lhe mostramos seus erros e o ajudamos na direção de como resolvê-los.
Eu mostro o código que tenho no momento em que você aprendeu uma maneira de escrevê-lo ....
Não há necessidade de pagar então e você pode comparar esse momento com o código que você fez aqui com a ajuda deste fórum.
....
minha última pergunta aqui ainda não foi respondida
Assumir que você tem uma conta em funcionamento com seu EA. Você abre manualmente uma negociação por GBPUSD.
a condição será verdadeira
.
. Em outro tópicoOrderClose error 138
você foi muito bem ajudado lá(RaptorUK e WHRoeder obrigado pela explicação lá eu acho muito bem feito)
.
Outra pergunta que tenho para você é
Por que você mudou o prazo neste cálculo da Média Móvel
Isto não é o mesmo que eu dei,
Não é calcular o valor correto em outro gráfico Diariamente
.
Portanto, reserve um tempo para aprender e praticar e leia atentamente a ajuda que você recebe aqui neste fórum
ou você paga a alguém para programar para você em um site como Jobs
asordensTotal() devem revelar a quantidade total de ordens pendentes e ordens de mercado, independentemente de terem sido abertas através de EA ou manual?
Eu estava pensando desta forma. Minha EA sempre verificará se há ordens abertas e se houver, ela não abrirá mais ordens e só abrirá novas ordens quando não houver ordens abertas.
Acho que está funcionando bem porque minha seção de resultados me mostra a seqüência de pedidos 1,1,2,2,3,3,3,4,4, o que significa que um pedido é fechado antes que um novo pedido seja aberto.
as variáveis de média móvel e LER mudaram devido a razões de teste. Eu estava experimentando em um período/período diferente, mas não o mudei quando o coloquei aqui.
e o mais bizarro de todos , meu código SOMENTE executará ordem de compra. nunca executou nem mesmo uma...ordem de venda. isso é simplesmente estranho,
em poucas palavras, os problemas que ainda estou enfrentando agora.
1. ele só executa a compra, mas nunca executa a venda, apesar do fato de eu ter codificado a venda
2. Ainda tendo lucro negativo, o que eu estou confiante que esta estratégia não é suposto.