void Compra()
{
double price;
if(TipoAction==TRADE_ACTION_DEAL) // Determinação do preço da ordem a mercado
price = simbolo.Ask();
else
price = simbolo.Bid() - Distancia;
double stoploss = simbolo.NormalizePrice(price - SL); // Cálculo normalizado do stoplossdouble takeprofit = simbolo.NormalizePrice(price + TP); // Cálculo normalizado do takeprofit//negocio.Buy(Volume, NULL, price, stoploss, takeprofit, "Compra CruzamentoMediaEA"); // Envio da ordem de compra pela classe responsável// Limpar informações das estruturasZeroMemory(request);
ZeroMemory(result);
ZeroMemory(check_result);
//--- Preenchimento da requisição
request.action =TipoAction;
request.magic =magic;
request.symbol =_Symbol;
request.volume =Volume;
request.price =price;
request.sl =stoploss;
request.tp =takeprofit;
if(TipoAction==TRADE_ACTION_DEAL)
request.type =ORDER_TYPE_BUY;
else
request.type =ORDER_TYPE_BUY_LIMIT;
request.type_filling =ORDER_FILLING_RETURN;
request.type_time =ORDER_TIME_DAY;
request.comment ="Compra CruzamentoMediaEA";
//--- Checagem e envio de ordensResetLastError();
if(!OrderCheck(request, check_result))
{
PrintFormat("Erro em OrderCheck: %d", GetLastError());
PrintFormat("Código de Retorno: %d", check_result.retcode);
return;
}
if(!OrderSend(request, result))
{
PrintFormat("Erro em OrderSend: %d", GetLastError());
PrintFormat("Código de Retorno: %d", result.retcode);
return;
}
ObjectCreate(0, "BE", OBJ_HLINE, 0, 0, price + BE);
}
//+------------------------------------------------------------------+//| Realizar venda com parâmetros especificados por input |//+------------------------------------------------------------------+void Venda()
{
double price;
if(TipoAction==TRADE_ACTION_DEAL) // Determinação do preço da ordem a mercado
price = simbolo.Bid();
else
price = simbolo.Ask() + Distancia;
double stoploss = simbolo.NormalizePrice(price + SL); // Cálculo normalizado do stoplossdouble takeprofit = simbolo.NormalizePrice(price - TP); // Cálculo normalizado do takeprofit//negocio.Sell(Volume, NULL, price, stoploss, takeprofit, "Venda CruzamentoMediaEA"); // Envio da ordem de compra pela classe responsável// Limpar informações das estruturasZeroMemory(request);
ZeroMemory(result);
ZeroMemory(check_result);
//--- Preenchimento da requisição
request.action =TipoAction;
request.magic =magic;
request.symbol =_Symbol;
request.volume =Volume;
request.price =price;
request.sl =stoploss;
request.tp =takeprofit;
if(TipoAction==TRADE_ACTION_DEAL)
request.type =ORDER_TYPE_SELL;
else
request.type =ORDER_TYPE_SELL_LIMIT;
request.type_filling =ORDER_FILLING_RETURN;
request.type_time =ORDER_TIME_DAY;
request.comment ="Venda CruzamentoMediaEA";
//--- Checagem e envio de ordensResetLastError();
if(!OrderCheck(request, check_result))
{
PrintFormat("Erro em OrderCheck: %d", GetLastError());
PrintFormat("Código de Retorno: %d", check_result.retcode);
return;
}
1. Você considera compras e vendas tudo na ponta Ask. Tem certeza disso? Você pode estar distorcendo sua estrategia ao não considerar as pontas Bid/Ask;
Sim, não irá mudar em nada minha estratégia
2. Você não trata eventuais erros no envio de ordens;
Melhorei a questão da checagem de erros no envio das ordens.
3. Falta verificar se o ativo não esta em leilão no envio de ordens.
Isso não vai influenciar, pois eu irei acompanhar o EA rodando.
A dúvida é realmente como fazer o stoploss ser a minima do candle anterior em caso de compra e em caso de venda a máxima do candle anterior.
All calculations and other actions performed due to the execution of an application program can be divided into two groups by the location of their execution: those executed in the user's PC and those executed on the server side. A significant amount of calculations is performed on the user's side. This group includes the execution of...
Não estou conseguindo fazer esse EA funcionar utilizando um indicador de renko, alguém pode me dá uma força? É a 1a vez que uso o iCustom dessa forma.. super obrigado! É uma simples compra e venda do tipo If(c[1]>c[2]) {Buy}
intOnCalculate(
constint rates_total, // tamanho das séries temporais de entrada constint prev_calculated, // número de barras processadas na chamada anterior constdatetime& time[], // matriz Time constdouble& open[], // matriz Open constdouble& high[], // matriz High constdouble& low[], // matriz Low constdouble& close[], // matriz Close constlong& tick_volume[], // matriz Tick Volume constlong& volume[], // matriz Real Volume constint& spread[] // matriz Spread
)
CopyBuffer(hc,3,0,3,c);
for(int i=1;i<rates_total;i++)
{
c[i]=close[i];
}
return(rates_total);
}
2a tentativa
double open[];
double high[];
double low[];
double close[];
int hc;
int OnInit()
{
ArraySetAsSeries(open, true);
SetIndexBuffer(0,open,INDICATOR_DATA);
ArraySetAsSeries(high, true);
SetIndexBuffer(1, high,INDICATOR_DATA);
ArraySetAsSeries(low, true);
SetIndexBuffer(2, low,INDICATOR_DATA);
ArraySetAsSeries(close, true);
SetIndexBuffer(3, close,INDICATOR_DATA);
int hc= iCustom(NULL,0,"Universal Renko Indicator.ex5","",RenkoBoxSize,RenkoShadowType,LookBackBars,"IC",
Retracement,AutoRenko,AutoRenkoMode,2,"",false,"",CORNER_LEFT_UPPER,2,true,true,false,"",true);
CopyBuffer(hc,0,0,3,open);
CopyBuffer(hc,1,0,3,high);
CopyBuffer(hc,2,0,3,low);
CopyBuffer(hc,3,0,3,close);
return (0);
Boa tarde galera tudo bem com vocês ,estou com problemas no meu EA para enviar ordem pendente na conta REAL da corretora MODAL, na conta DEMO funcionou corretamente mais quando coloco na real retorna esse erro...
Criei este indicador simples, mas ele tem sido bastante útil pra mim.
Se trata de uma linha que mostra no gráfico Ordens por tick maiores que um valor configurado no Input.
Por exemplo, no dólar configuro para que ele me mostre ordens acima de 1000, pois pretendo saber as ordens diretas de grande vulto.
Tenho tido 2 problemas nele:
1 - Alguns ticks não são "percebidos" pelo código e ele falha em plotar na tela, pela compilação ele demora 1006 msec, então acredito que isso faça com que ele "pule" certos ticks, sei lá.
2 - Algumas vezes há um tipo de Reset automático, não sei se é por perda de conexão ou algo assim, mas ele deleta todos os dados plotados anteriormente
Ola, vi em vários exemplos de códigos um checando se o Robô irá fazer um novo trade, apenas em uma nova barra, ou seja, dentro do OnTick ele só vai ver se deu o sinal quando aparecer uma nova vela. Sei que isso acelera o funcionamento do Robô mas existe problemas em não checar se existe uma nova barra? Outro ponto é em checando a nova barra como colocar para fazer trades no rompimento da máxima anterior?
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
StopLoss e TakeProfit
lbevilaqua, 2019.05.14 04:58
1. Você considera compras e vendas tudo na ponta Ask. Tem certeza disso? Você pode estar distorcendo sua estrategia ao não considerar as pontas Bid/Ask;
Sim, não irá mudar em nada minha estratégia
2. Você não trata eventuais erros no envio de ordens;
Melhorei a questão da checagem de erros no envio das ordens.
3. Falta verificar se o ativo não esta em leilão no envio de ordens.
Isso não vai influenciar, pois eu irei acompanhar o EA rodando.
A dúvida é realmente como fazer o stoploss ser a minima do candle anterior em caso de compra e em caso de venda a máxima do candle anterior.
Aceito sugestões é claro.
Agradecido desde já
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Trabalhando Com Mais de uma Ativo
Bruno Gonçalves, 2019.04.12 16:32
Bom dia gostaria de saber qual o parametro esta errado, porque ele nao efetua a operacao nos dois ativos.
Muito Obrigado
Dentro deste tópico, considero o artigo abaixo como de leitura indispensável.
Bom Dia pessoal!
Não estou conseguindo fazer esse EA funcionar utilizando um indicador de renko, alguém pode me dá uma força? É a 1a vez que uso o iCustom dessa forma.. super obrigado! É uma simples compra e venda do tipo If(c[1]>c[2]) {Buy}
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
OrderSend error 4756 (WINV17,M1) retcode=10030... erro ao enviar ordem na conta REAL
JOSUCA, 2017.10.05 18:55
Boa tarde galera tudo bem com vocês ,estou com problemas no meu EA para enviar ordem pendente na conta REAL da corretora MODAL, na conta DEMO funcionou corretamente mais quando coloco na real retorna esse erro...
OrderSend error 4756
2017.10.05 13:41:01.556 GALAXY (WINV17,M1) retcode=10030 deal=0 order=0
//-- declaração e inicialização do pedido e o seu resultado
MqlTradeResult result={0};
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
EA posicionando StopLoss e TakeProfit no lugar errado devido a volatilidade.
fillipeyuri_, 2019.05.24 18:05
Obrigado pela atenção!
Segue o trecho do código:
Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação
Indicador de Grandes Ordens (Ajuda)
zuazo, 2019.05.25 03:31
Olá pessoal!
Criei este indicador simples, mas ele tem sido bastante útil pra mim.
Se trata de uma linha que mostra no gráfico Ordens por tick maiores que um valor configurado no Input.
Por exemplo, no dólar configuro para que ele me mostre ordens acima de 1000, pois pretendo saber as ordens diretas de grande vulto.
Tenho tido 2 problemas nele:
1 - Alguns ticks não são "percebidos" pelo código e ele falha em plotar na tela, pela compilação ele demora 1006 msec, então acredito que isso faça com que ele "pule" certos ticks, sei lá.
2 - Algumas vezes há um tipo de Reset automático, não sei se é por perda de conexão ou algo assim, mas ele deleta todos os dados plotados anteriormente
Alguém poderia dar uma ajuda ?
Boa tarde Vitor
1) O modelo de negócio é que vai definir se posição será aberta no candle em andamento ou no fechamento(novo candle).
2) Se vai dar problema em não checar nova barra? Depende da estratégia.
3) Como checar se rompeu máxima anterior?
Se a estratégia é por candle fechado então basta testar quando abrir o novo candle se OPEN (candle corrente) > HIGH (candle anterior)
Se a estratégia não é por candle fechado então basta testar a cada tick recebido CLOSE(candle corrente) > HIGH (candle anterior)