Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 758 1...751752753754755756757758759760761762763764765...1178 Novo comentário Artyom Trishkin 2014.10.30 06:25 #7571 Ozero:Passe o ";" atrás do suporte. O programa funciona, MAS ocasionalmente falha com erro 4108.Ozero.Abrir ajuda, ver erros de tempo de execução, e nós vemos: 4108 ERR_INVALID_TICKET Número de bilhete incorreto.Pense e procure... MegaHunter 2014.10.30 06:26 #7572 Ajudar as pessoas a negociar em cada moeda com suas próprias ordens para distinguir e diferenciar + após a ordem aberta se o preço voltar ainda mais longe poderia abrir outra ordem igual à primeira.//+------------------------------------------------------------------+ //| MACD Sample.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ extern double TakeProfit = 50; extern double Lots = 0.1; extern double TrailingStop = 30; extern double MACDOpenLevel=3; extern double MACDCloseLevel=2; extern double MATrendPeriod=26; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; int cnt=0, ticket, total; // первичные проверки данных // важно удостовериться что эксперт работает на нормальном графике и // пользователь правильно выставил внешние переменные (Lots, StopLoss, // TakeProfit, TrailingStop) // в нашем случае проверяем только TakeProfit if(Bars<100) { Print("bars less than 100"); return(0); } if(TakeProfit<10) { Print("TakeProfit less than 10"); return(0); // проверяем TakeProfit } // ради упрощения и ускорения кода, сохраним необходимые // данные индикаторов во временных переменных MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); total=OrdersTotal(); if(total<1) { // нет ни одного открытого ордера if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } // проверяем на возможность встать в длинную позицию (BUY) if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } // проверяем на возможность встать в короткую позицию (SELL) if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } return(0); } // переходим к важной части эксперта - контролю открытых позиций // 'важно правильно войти в рынок, но выйти - еще важнее...' for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // это открытая позиция? OP_BUY или OP_SELL OrderSymbol()==Symbol()) // инструмент совпадает? { if(OrderType()==OP_BUY) // открыта длинная позиция { // проверим, может уже пора закрываться? if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDCloseLevel*Point)) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // закрываем позицию return(0); // выходим } // проверим - может можно/нужно уже трейлинг стоп ставить? if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop, OrderTakeProfit(),0,Green); return(0); } } } } else // иначе это короткая позиция { // проверим, может уже пора закрываться? if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point)) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // закрываем позицию return(0); // выходим } // проверим - может можно/нужно уже трейлинг стоп ставить? if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop, OrderTakeProfit(),0,Red); return(0); } } } } } } return(0); } // конец. [ARQUIVO] Qualquer pergunta de Perguntas de Iniciantes MQL4 GoldWarrior02b Alexey Kravchenko 2014.10.30 06:33 #7573 Olá a todos!Acabo de notar que o NormalizeDouble funciona de forma estranha.Ou seja, o Expert Advisor trabalha bem e não tem erros, mas os logs no Strategy Tester são muito estranhos.Vou explicar.Eu calculo o lucro usando esta função. Eu faço o que acho que o NormalizeDouble(Lucro,Dígitos) deve fazer;Então Imprimo(" lucro=",DoubleToStrMorePrecision(Profit,8));Como resultado, o registro mostra o seguinte: "lucro=0,88881912". Parece ser 0,88881000, certo?Ou talvez eu seja estúpido e faça algo errado? Uma biblioteca rápida e Função para Calcular lucro Perguntas do Dummies. Artyom Trishkin 2014.10.30 06:36 #7574 goodearth:Olá a todos!Acabo de notar que o NormalizeDouble funciona de forma estranha.Ou seja, o Expert Advisor trabalha bem e não tem erros, mas os logs no Strategy Tester são muito estranhos.Vou explicar.Eu calculo o lucro usando esta função. Eu faço o que acho que o NormalizeDouble(Lucro,Dígitos) deve fazer;Então Imprimo(" lucro=",DoubleToStrMorePrecision(Profit,8));Como resultado, o registro mostra a seguinte mensagem: "lucro=0,88881912". Parece ser 0,88881000, certo?Ou talvez eu seja estúpido e faça algo errado? Você tem um valor de lucro em ordens comerciais? Alexey Kravchenko 2014.10.30 06:43 #7575 artmedia70: Seu valor de lucro participa de ordens comerciais?Sim, é claro. E sem erros :-). Foi por isso que fiquei surpreso.Eu tenho o Build 735.O comércio está em demonstração.Aaaaaaaaaaaah Eu peguei! Esqueci a operação de atribuição:-). "Profit=NormalizeDouble(Profit,Digits)".Mas eu ainda não entendo porque a EA não mostra erros ))Talvez o servidor arredonde automaticamente.....Eu pensei que NormalizeDouble é um procedimento, não uma função :-). Quaisquer perguntas de recém-chegados Vou escrever o indicador Como posso saber se Boris 2014.10.30 07:17 #7576 Ozero: Coloque ";" atrás de um parêntese. O programa funciona, MAS ocasionalmente falha com erro 4108.Ozero.De fato, ele precisa ser apagado! Artyom Trishkin 2014.10.30 07:35 #7577 borilunad: Na verdade, ela deve ser apagada!Boris, é melhor mostrar-lhe o código diretamente, porque eu estava com sono demais para me lembrar... ;)ResetLastError(); if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("Чё-та не закрылася позиция. Фигня вот такая происходит: "+GetLastError()); Boris 2014.10.30 08:05 #7578 artmedia70: Boris, é melhor mostrar-lhe o código diretamente, porque eu estava com sono demais para me lembrar... ;)Não quis abusar de seus direitos autorais! ;)E sério, algo não colou! Mas eu vou tentar agora!ResetLastError(); if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("");E agora funcionou! Isso é estranho! visnu 2014.10.30 12:35 #7579 OláPor favor, me dê uma solução.Há uma EA que compila sem erros com a 500ª construção do editor.Mas na nova versão gera erros. Eu vejo estes erros:bool TP?=true; // ошибка '?' - semicolon expected E este aqui duas vezes.if(TP?) // ')' - unexpected token // ')' - ':' colon sign expected Procurei no manual a nova versão e a antiga, mas não encontrei nada sobre o ponto de interrogação.Pergunta: o que significam estas operações e como corrigi-las para que o código seja compilado normalmente?Obrigado de antemão. Indicadores: Candles_Smoothed Comércio harmônico Discussão do artigo "Crie [Deleted] 2014.10.30 15:26 #7580 Olá! Você poderia me dizer por que às vezes tenho um operador ifle que não funciona. Aqui está um exemplo: double H3=ObjectGet ("H3 line", OBJPROP_PRICE1); int start() { double price = Bid; if (price==H3) { Alert ("Урааааа ", Symbol()); } return(0); }Onde: H3 é o valor do preço do nível preço é o preço atual O resultado é que o preço atinge este nível (às vezes até pára nele), mas Alert não aciona. Você pode me dizer qual é o erro? [ARQUIVO] Qualquer pergunta de Como posso recuperar dados Efeito de borda no 1...751752753754755756757758759760761762763764765...1178 Novo comentário
Passe o ";" atrás do suporte.
O programa funciona, MAS ocasionalmente falha com erro 4108.
Ozero.
Abrir ajuda, ver erros de tempo de execução, e nós vemos:
4108
ERR_INVALID_TICKET
Número de bilhete incorreto.
Pense e procure...
Ajudar as pessoas a negociar em cada moeda com suas próprias ordens para distinguir e diferenciar + após a ordem aberta se o preço voltar ainda mais longe poderia abrir outra ordem igual à primeira.
Olá a todos!
Acabo de notar que o NormalizeDouble funciona de forma estranha.
Ou seja, o Expert Advisor trabalha bem e não tem erros, mas os logs no Strategy Tester são muito estranhos.
Vou explicar.
Eu calculo o lucro usando esta função. Eu faço o que acho que o NormalizeDouble(Lucro,Dígitos) deve fazer;
Então Imprimo(" lucro=",DoubleToStrMorePrecision(Profit,8));
Como resultado, o registro mostra o seguinte: "lucro=0,88881912". Parece ser 0,88881000, certo?
Ou talvez eu seja estúpido e faça algo errado?
Olá a todos!
Acabo de notar que o NormalizeDouble funciona de forma estranha.
Ou seja, o Expert Advisor trabalha bem e não tem erros, mas os logs no Strategy Tester são muito estranhos.
Vou explicar.
Eu calculo o lucro usando esta função. Eu faço o que acho que o NormalizeDouble(Lucro,Dígitos) deve fazer;
Então Imprimo(" lucro=",DoubleToStrMorePrecision(Profit,8));
Como resultado, o registro mostra a seguinte mensagem: "lucro=0,88881912". Parece ser 0,88881000, certo?
Ou talvez eu seja estúpido e faça algo errado?
Seu valor de lucro participa de ordens comerciais?
Sim, é claro. E sem erros :-). Foi por isso que fiquei surpreso.
Eu tenho o Build 735.
O comércio está em demonstração.
Aaaaaaaaaaaah Eu peguei! Esqueci a operação de atribuição:-). "Profit=NormalizeDouble(Profit,Digits)".
Mas eu ainda não entendo porque a EA não mostra erros ))
Talvez o servidor arredonde automaticamente.....
Eu pensei que NormalizeDouble é um procedimento, não uma função :-).
Coloque ";" atrás de um parêntese.
O programa funciona, MAS ocasionalmente falha com erro 4108.
Ozero.
De fato, ele precisa ser apagado!
Na verdade, ela deve ser apagada!
Boris, é melhor mostrar-lhe o código diretamente, porque eu estava com sono demais para me lembrar... ;)
Boris, é melhor mostrar-lhe o código diretamente, porque eu estava com sono demais para me lembrar... ;)
Não quis abusar de seus direitos autorais! ;)
E sério, algo não colou! Mas eu vou tentar agora!
E agora funcionou! Isso é estranho!
Olá! Você poderia me dizer por que às vezes tenho um operador ifle que não funciona.
Aqui está um exemplo:
Onde:
H3 é o valor do preço do nível
preço é o preço atual
O resultado é que o preço atinge este nível (às vezes até pára nele), mas Alert não aciona.
Você pode me dizer qual é o erro?