Como codificar? - página 279

 
g.pociejewski:
[lang=pl]Em mais perguntas, sua hora é i GMT ou não? Se não for GMT, farei pequenas mudanças neste EA.

Acabei de fazer isso, por favor, verifique se tudo está bem.

A distância entre o ponto de parada baixo e o ponto de parada altoLoss e TP i feitos como variabéis externos.

Saúde Grzesiek [/lang].

Caro Grzesiek

Colei este indicador na pasta de especialistas e hoje monitorei para saber como funciona. O problema é que uma vez que faz a primeira troca e fecha a ordem, seja em stop ou t/p, então imediatamente a EA inicia novamente a troca no preço em que fechou a ordem recente. Como posso pará-lo no código? obrigado

 

Alguém pode me ajudar com isso?

Olá Fórum

este Código tem um problema, quando executa o comércio seu OK, mas quando fecha o pedido novamente a EA abre novo comércio pelo preço e na época em que o pedido anterior foi fechado. Eu não vi nenhum erro no código. Quem escreveu isto é um cara muito ocupado e não está online. Alguém pode sugerir qual é o problema?

stopLoss externo duplo = 35,0;

takeProfit duplo externo = 50,0;

string externa Begin="00:00";

fio externo Fim="08:00";

distância dupla externa = 5;

bool isECN = verdadeiro;

bool cond = falso;

bool cond2 = falso;

duplo baixo;

duplo alto;

lotes duplos externos = 1;

int magic = 123;

int slippage = 1;

comentário de cordel = "teste";

int ticket;

//+------------------------------------------------------------------+

//| função de iniciação de especialista |

//+------------------------------------------------------------------+

int init()

{

//----

//----

retorno(0);

}

//+------------------------------------------------------------------+

//| função de desinicialização especializada |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

retorno(0);

}

//+------------------------------------------------------------------+

//| função de início especializado |

//+------------------------------------------------------------------+

int start()

{

//----

if(isGoodTime(Begin,End))

{

se(!cond)

{

baixo = Licitação;

alto = Pedir;

}

cond = verdadeiro;

if(Bid < low) low = Bid;

if(Perguntar > alto) alto = Perguntar;

}

if((alto - baixo)*1000>distância)

{

cond2 = verdadeiro;

}

if(!isGoodTime(Begin,End))

{

cond = falso;

}

if(!isGoodTime(Begin,End) && cond2)

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<=(low-0.0010))

{

if(isECN == falso)

{

OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss),sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic);

}

se(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point,takeProfit),0);

}

}

}

if(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.0010)

{

if(isECN==falso)

{

OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),comment,magic);

}

se(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point,takeProfit),0);

}

}

}

}

//----

retorno(0);

}

//+------------------------------------------------------------------+

bool isGoodTime(string Begin, string End) {

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

retorno(true);

}

retorno(falso);

}

int countOrders(int oMagic,int oType) {

int contagem=0;

for(int i=0;i<OrdersTotal();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

contar++;

}

}

}

}

}

devolução(contagem);

}

duplo sltpValue(duplo w1, int w2)

{

if(w2 == 0)

retorno (0);

retorno (NormalizeDuplo(w1, Dígitos));

}

 

Olá Avasys,

Até onde posso dizer que não há nada de errado com o código, baseado em sua descrição, ele faz exatamente o que está programado para fazer (comprar quando Ask é mais alto que alto e vender quando a oferta é mais baixa que baixa) ele basicamente continua a comprar e vender quando o alto e o baixo são quebrados, respectivamente.

Saúde,

 
Avasys:
Obrigado por seu comentário

Existe alguma maneira de dizer código para negociar apenas uma vez por dia e apenas a primeira saída.

O autor deste código é um homem muito ocupado, que não pôde contribuir muito tempo, como parece

a ajuda é apreciada

[lang=pl]//+------------------------------------------------------------------+

//| simples EA.mq4 |

//| Copyright © 2011, luktom.biz |

//| www.luktom.biz/en |

//+------------------------------------------------------------------+

#direitos autorais "Copyright © 2011, luktom.biz".

#link do proprietário "http://www.luktom.biz"

Parada dupla externaLoss = 300,0;

takeProfit duplo externo = 500,0;

fio externo Begin="2:00";

cordão externo Fim="10:00";

distância dupla externa = 60;

bool isECN = verdadeiro;

bool cond = falso;

bool cond2 = falso;

duplo baixo;

duplo alto;

lotes duplos externos = 0,1;

int magic = 1232344524285020;

int slippage = 1;

comentário de cordel = "";

int ticket;

int short = 0;

int longo = 0;

//+------------------------------------------------------------------+

//| função de iniciação de especialista |

//+------------------------------------------------------------------+

int init()

{

//----

//----

retorno(0);

}

//+------------------------------------------------------------------+

//| função de desinicialização especializada |

//+------------------------------------------------------------------+

int deinit()

{

//----

Print(countOrders(magia,OP_BUY));

//----

retorno(0);

}

//+------------------------------------------------------------------+

//| função de início especializado |

//+------------------------------------------------------------------+

int start()

{

Imprimir(AccountCurrency());

//----

if(isGoodTime(Begin,End))

{

curto = 0;

longo = 0;

if(!cond)

{

baixo = Licitação;

alto = Pedir;

}

cond = verdadeiro;

if(Bid < low) low = Bid;

if(Perguntar > alto) alto = Perguntar;

}

if((alto - baixo)*1000>distância)

{

cond2 = verdadeiro;

}

if(!isGoodTime(Begin,End))

{

cond = falso;

}

if(!isGoodTime(Begin,End) && cond2)

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<==(low-0.0005) && short === 0)

{

curto++;

if(isECN == falso)

{

OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss),sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic);

}

se(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point,takeProfit),0);

}

}

}

if(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0,005 && long ==0)

{

longo++;

if(isECN==falso)

{

OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),comment,magic);

}

se(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point,takeProfit),0);

}

}

}

}

//----

retorno(0);

}

//+------------------------------------------------------------------+

bool isGoodTime(string Begin, string End) {

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

retorno(verdadeiro);

}

retorno(falso);

}

int countOrders(int oMagic,int oType) {

int contagem=0;

for(int i=0;i<OrdersTotal();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

contar++;

}

}

}

}

}

devolução(contagem);

}

duplo sltpValue(duplo w1, int w2)

{

if(w2 == 0)

retorno (0);

retorno (NormalizeDuplo(w1, Dígitos));

}

Agora a EA abre apenas uma posição por dia. Referindo-se à sua pergunta sobre e-mails, em algum lugar do fórum existe meu post neles:)

Informe-me se encontrá-la.

Abraço,

Grzesiek[/lang]

 
Pip:
Olá Avasys,

Até onde posso dizer que não há nada de errado com o código, baseado em sua descrição ele faz exatamente o que está programado para fazer (comprar quando Ask é mais alto que alto e vender quando a oferta é mais baixa que baixa) ele basicamente continua comprando e vendendo quando o alto e o baixo são quebrados, respectivamente.

Abraço,

Obrigado por seu comentário.

Existe alguma maneira de dizer código para negociar apenas uma vez por dia e apenas a primeira fuga.

O autor deste código é um homem muito ocupado, que não pôde contribuir muito tempo, como parece

e o que tenho notado é que o sistema executa ordens apesar do intervalo entre os tempos indicados em código ser superior a 60 pips o sistema ainda opera, ele só opera se o intervalo entre os tempos específicos (indicados em código, ver horários de início e fim) for inferior a 60 pips então opera.

a ajuda é apreciada

 
g.pociejewski:
[lang=pl]//+------------------------------------------------------------------+

//| simples EA.mq4 |

//| Copyright © 2011, luktom.biz |

//| www.luktom.biz/en |

//+------------------------------------------------------------------+

#direitos autorais "Copyright © 2011, luktom.biz".

#link do proprietário "http://www.luktom.biz"

Parada dupla externaLoss = 300,0;

takeProfit duplo externo = 500,0;

fio externo Begin="2:00";

cordão externo Fim="10:00";

distância dupla externa = 60;

bool isECN = verdadeiro;

bool cond = falso;

bool cond2 = falso;

duplo baixo;

duplo alto;

lotes duplos externos = 0,1;

int magic = 1232344524285020;

int slippage = 1;

comentário de cordel = "";

int ticket;

int short = 0;

int longo = 0;

//+------------------------------------------------------------------+

//| função de iniciação de especialista |

//+------------------------------------------------------------------+

int init()

{

//----

//----

retorno(0);

}

//+------------------------------------------------------------------+

//| função de desinicialização especializada |

//+------------------------------------------------------------------+

int deinit()

{

//----

Print(countOrders(magia,OP_BUY));

//----

retorno(0);

}

//+------------------------------------------------------------------+

//| função de início especializado |

//+------------------------------------------------------------------+

int start()

{

Imprimir(AccountCurrency());

//----

if(isGoodTime(Begin,End))

{

curto = 0;

longo = 0;

if(!cond)

{

baixo = Licitação;

alto = Pedir;

}

cond = verdadeiro;

if(Bid < low) low = Bid;

if(Perguntar > alto) alto = Perguntar;

}

if((alto - baixo)*1000>distância)

{

cond2 = verdadeiro;

}

if(!isGoodTime(Begin,End))

{

cond = falso;

}

if(!isGoodTime(Begin,End) && cond2)

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<==(low-0.0005) && short === 0)

{

curto++;

if(isECN == falso)

{

OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss),sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic);

}

se(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point,takeProfit),0);

}

}

}

if(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0,005 && long ==0)

{

longo++;

if(isECN==falso)

{

OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),comment,magic);

}

se(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point,takeProfit),0);

}

}

}

}

//----

retorno(0);

}

//+------------------------------------------------------------------+

bool isGoodTime(string Begin, string End) {

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

retorno(true);

}

retorno(falso);

}

int countOrders(int oMagic,int oType) {

int contagem=0;

for(int i=0;i<OrdersTotal();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

contar++;

}

}

}

}

}

devolução(contagem);

}

duplo sltpValue(duplo w1, int w2)

{

if(w2 == 0)

retorno (0);

retorno (NormalizeDuplo(w1, Dígitos));

}

Agora a EA abre apenas uma posição por dia. Referindo-se à sua pergunta sobre e-mails, em algum lugar do fórum existe meu post neles:)

Informe-me se encontrá-lo.

Abraço,

Grzesiek[/lang]

obrigado homem,

Copiei o código inteiro aqui e colei em arquivo mq4, mas quando o copiei para a pasta experts não funcionou, não criou o arquivo ex4 e não está no manu dos experts advisors. Então, por favor, você pode carregar como arquivo mq4 ou há alguma coisa no código, porque eu tentei várias vezes

 

Detectar Posições do Rato Clique x,y na tabela

É possível detectar a posição de um clique do mouse no MT4? Não estou falando de WindowOnDrop. Se eu souber as coordenadas x, y da tela, posso convertê-la para o preço/tempo correspondente?

Obrigado por sua ajuda.

Com os melhores cumprimentos,

Tiffany

 

Prezado amigo

Hoje na segunda-feira o código (antigo que funcionava na quinta e na sexta-feira) não funcionava em absoluto

Eu entrei manualmente nas negociações,

 

Sistema simples: Precisa de muito pouca recomendação da EA

Aqui está a Lógica

Negocie quando o intervalo entre GMT 02:00 e 10:00 for inferior a 60 pips então Open sell IF quebra o preço mínimo - linha 5pips ou compre se o preço quebra o máximo + linha 5 pips. E EXECUTAR APENAS UMA NEGOCIAÇÃO POR DIA, NÃO IMPORTA SE A NEGOCIAÇÃO É CANCELADA EM STOP OU SE É TIRADO LUCRO APENAS UM PEDIDO POR DIA.

AQUI É CÓDIGO MAS NÃO FUNCIONA, NA EA MANU DE MT4 tem ícone inativo e não há arquivo ex4 na pasta de especialistas, não consegui entender o que está errado

Parada dupla externaLoss = 300,0;

takeProfit duplo externo = 500,0;

fio externo Início = "2: 00";

cordão externo Fim = "10: 00";

distância dupla externa = 60;

bool isECN = verdadeiro;

bool cond = falso;

bool cond2 = falso;

duplo baixo;

duplo alto;

lotes duplos externos = 0,1;

int magic = 1232344524285020;

int slippage = 1;

comentário de cordel = "";

int ticket;

int short = 0;

int longo = 0;

//+------------------------------------------------------------------+

//| função de iniciação de especialista |

//+------------------------------------------------------------------+

int init()

{

//----

//----

(0) retorno;

}

//+------------------------------------------------------------------+

//| função de desinicialização especializada |

//+------------------------------------------------------------------+

int deinit ()

{

//----

Imprimir (contagemOrdens (magia, OP_BUY));

//----

(0) retorno;

}

//+------------------------------------------------------------------+

//| função de início especializado |

//+------------------------------------------------------------------+

int start()

{

Imprimir (AccountCurrency ()));

//----

se (isGoodTime (Início, Fim))

{

curto = 0;

longo = 0;

se (! cond)

{

baixo = Licitação;

alto = Pedir;

}

cond = verdadeiro;

se (Licitação < baixa) baixa = Licitação;

se (Perguntar > alto) alto = Perguntar;

}

se ((alto-baixo) * 1000 > distância)

{

cond2 = verdadeiro;

}

se (! isGoodTime (Início, Fim))

{

cond = falso;

}

se (! isGoodTime (Begin, End) & cond2)

{

if (countOrders (countOrders (magia, OP_SELL) == 0)

{

if (Bid ≪ = (CRL-0.0005) & short === 0)

{

curto + +;

se (isECN == falso)

{

OrderSend (Symbol (), OP_SELL, lots, Bid, slippage, sltpValue (Ask + stopLoss * Point, stopLoss), sltpValue (Ask-takeProfit * Point, takeProfit), comment, magic);

}

se (isECN)

{

bilhete = OrderSend (Symbol (), OP_SELL, lots, Bid, slippage, 0,0, comment, magic);

OrderSelect (bilhete, SELECT_BY_TICKET);

OrderModify (ticket, OrderOpenPrice (), sltpValue (Ask + stopLoss * Ponto, stopLoss), sltpValue (Bid-takeProfit * Ponto, takeProfit), 0);

}

}

}

if (countOrders (magia, OP_BUY) == 0)

{

se ((Ask-high) > = = 0,005 & & long = = = 0)

{

longo + +;

se (isECN == falso)

{

OrderSend (Symbol (), OP_BUY, lots, Ask, slippage, sltpValue (Ask-stopLoss * Point, stopLoss), sltpValue (Bid + takeProfit * Point, takeProfit), comment, magic);

}

se (isECN)

{

bilhete = OrderSend (Symbol (), OP_BUY, lots, Ask, slippage, 0,0, comment, magic);

OrderSelect (bilhete, SELECT_BY_TICKET);

OrderModify (ticket, OrderOpenPrice (), sltpValue (Bid-stopLoss * Point, stopLoss), sltpValue (Ask + takeProfit * Point, takeProfit), 0);

}

}

}

}

//----

(0) retorno;

}

//+------------------------------------------------------------------+

bool isGoodTime (string, string, Begin, End) {

if (TimeCurrent () > Localtime (Início) & TimeCurrent < Localtime () (Fim)) {

retorno (verdadeiro);

}

retornar (falso);

}

int countOrders (int, int oMagic oType) {

int count = 0;

para (int i = 0; i < OrderTotal (); i ++) {

se (OrderSelect (i, SELECT_BY_POS)) {

se (OrderMagicNumber () == oMagic) {

se (OrderSymbol () = o = Símbolo ()) {

se (OrderType () == oType || oType < 0) {

contar ++;

}

}

}

}

}

retornar (contar);

}

valor duplo sltpValue (duplo, int w1 w2)

{

se (w2 = = 0)

retorno (0);

retorno (NormalizeDuplo (w1, Dígitos));

}

 

Forex.com EAs

Eu sou um idiota. Eu postei isto no fórum errado... e não sei como movê-lo para o fórum de programação. Peço desculpas pelo inconveniente; o erro foi involuntário.

Tenho negociado forex à vista por 3 anos e desenvolvi 2 EAs. Estes EAs funcionam bem na Glocap, FXCM e Alpari (sou um residente nos EUA, portanto minha escolha de corretores é um pouco limitada). Além disso, eu quero uma conta MT4 com a comissão incorporada no spread (preferência pessoal).

Recentemente testei estes EAs em uma conta demo no Forex.com (Gain Capital). Ambos os EAs funcionaram bem e foram negociados de acordo com as regras programadas. Entretanto, quando eu abri uma conta ativa no Forex.com, a EA #1 não funciona mais adequadamente, mas a EA #2 funciona bem. A EA #1 funciona bem no testador de estratégia do Forex.com, mas sei que isso não conta muito. Tudo isso é muito estranho para mim, porque ambos os EA #1 usam o mesmo código para abrir negociações (o erro na EA #1 vem quando se tenta abrir negociações), definir o tamanho do lote, monitorar negociações e fechar negociações. Aqui está um pouco de informação sobre os dois EAs:

EA #1 EUR/JPY Utiliza o indicador Ichimoku

EA #2 EUR/USD Utiliza 3 médias móveis e MACD

Como eu disse antes, a EA # 2 opera bem; funciona de acordo com as regras programadas. Quando a EA #1 tenta abrir algumas negociações, eu recebo a seguinte mensagem de erro: 2011.11.21 17:00:02Ichimoku_1700Eastern EURJPYpro,H1: Ichimoku_Open EA for EURJPYpro: Erro na abertura do pedido de compra : (133) comércio está desativado /// para 103.7210

Além disso, quando a EA #2 tenta colocar uma negociação, o registro de Peritos sempre mostra que a std.lib está carregando imediatamente antes das negociações que lançam um erro (isso não acontece na EA #1):2011.11.21 17:00:02stdlib EURJPYpro,H1: carregado com sucesso

Aqui está a peça final deste quebra-cabeça: EA #2 abrirá negócios, mas não às 1700 orientais. Todos os erros lançados ocorreram em comércios tentando abrir às 1700 orientais (isto pode ser uma coincidência).

Eu rasguei a EA; reescrevi o código do zero; copiei o código da EA #1 para a EA #2 e nada parece corrigir o problema. O Forex.com não quer ajudar, pois consideram este "suporte EA" que não oferecem. No que posso encontrar na Internet sobre este erro, significa que ou a) o corretor não permite a negociação da EA (que eu sei que não é verdade) ou b) a negociação está enviando paradas e/ou limites que não funcionam com um corretor de Execução Instantânea (a negociação NÃO está enviando paradas ou limites). O Forex.com disse que eles NÃO suspendem a negociação em nenhum momento durante o dia de negociação.

Minhas perguntas para este grupo são as seguintes:

1. Alguém já se deparou com este problema?

2. Se sim, o que você fez para resolvê-lo?

3. Se você nunca viu esta questão, o que você acha que poderia estar causando isto?

Tenho certeza de que isto é algo simples que não estou vendo. Quaisquer comentários, histórias de experiência e pensamentos do campo da esquerda seriam muito apreciados.

Razão: