Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 758 1...751752753754755756757758759760761762763764765...1180 Nuevo comentario Artyom Trishkin 2014.10.30 06:25 #7571 Ozero:Pasa el ";" por detrás del corchete. El programa funciona, PERO ocasionalmente falla con el error 4108.Ozero.Abrir la ayuda, ver los errores de ejecución, y vemos: 4108 ERR_INVALID_TICKET Número de billete incorrecto.Piensa y busca... MegaHunter 2014.10.30 06:26 #7572 Ayudar a la gente a operar en cada moneda con sus propias órdenes para distinguir y diferenciar + después de la orden abierta si el precio retrocede aún más podría abrir otra orden igual a la primera.//+------------------------------------------------------------------+ //| 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); } // конец. Guerrero de oro02b [ARCHIVO] Cualquier pregunta de [¡AVISO CERRADO!] Cualquier pregunta Alexey Kravchenko 2014.10.30 06:33 #7573 Hola a todos.Acabo de darme cuenta de que NormalizeDouble funciona de forma extraña.Es decir, el Asesor Experto funciona bien y no tiene errores, pero los registros en el Probador de Estrategias son muy extraños.Te lo explicaré.Calculo el beneficio utilizando esta función. Hago lo que creo que debería hacer NormalizeDouble(Profit,Digits);Entonces imprimo(" profit=",DoubleToStrMorePrecision(Profit,8));Como resultado, el registro muestra lo siguiente: "profit=0.88881912". Parece que es 0,88881000, ¿verdad?¿O tal vez soy estúpido y hago algo mal? Cualquier pregunta de los Preguntas de los principiantes Aprendizaje automático en el Artyom Trishkin 2014.10.30 06:36 #7574 goodearth:Hola a todos.Acabo de darme cuenta de que NormalizeDouble funciona de forma extraña.Es decir, el Asesor Experto funciona bien y no tiene errores, pero los registros en el Probador de Estrategias son muy extraños.Te lo explicaré.Calculo el beneficio utilizando esta función. Hago lo que creo que debería hacer NormalizeDouble(Profit,Digits);Entonces imprimo(" profit=",DoubleToStrMorePrecision(Profit,8));Como resultado, el registro muestra el siguiente mensaje: "profit=0.88881912". Parece que es 0,88881000, ¿verdad?¿O tal vez soy estúpido y hago algo mal?¿Tiene un valor de beneficio en las órdenes comerciales? Alexey Kravchenko 2014.10.30 06:43 #7575 artmedia70: ¿Participa su valor de beneficio en las órdenes comerciales?Sí, por supuesto. Y sin errores :-). Por eso me sorprendió.Tengo la construcción 735.El comercio es en la demo.¡Aaaaaaaaah lo tengo! He olvidado la operación de asignación:-). "Beneficio=NormalizarDoble(Beneficio,Dígitos)".Pero sigo sin entender por qué el EA no muestra errores ))Tal vez el servidor redondea automáticamente .....Pensé que NormalizeDouble era un procedimiento, no una función :-). Cómo armo mi asesor [¡Archivo!] Cualquier pregunta de Se necesita ayuda para Boris 2014.10.30 07:17 #7576 Ozero: Poner ";" detrás de un paréntesis. El programa funciona, PERO a veces falla con el error 4108.Ozero.De hecho, ¡hay que borrarlo! Artyom Trishkin 2014.10.30 07:35 #7577 borilunad: De hecho, ¡debería eliminarse!Boris, será mejor que le enseñes el código directamente, porque tenía demasiado sueño para recordar... ;)ResetLastError(); if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("Чё-та не закрылася позиция. Фигня вот такая происходит: "+GetLastError()); Boris 2014.10.30 08:05 #7578 artmedia70: Boris, será mejor que le enseñes el código directamente, porque tenía demasiado sueño para recordar... ;)No quería abusar de tus derechos de autor. ;)Y en serio, ¡algo no se pegó! ¡Pero lo probaré ahora!ResetLastError(); if(!OrderClose(OrderTicket(),OrderLots(),_Bid,15)) Print("");¡Y ahora está funcionando! ¡Qué raro! visnu 2014.10.30 12:35 #7579 HolaPor favor, denme una solución.Hay un EA que compila sin errores con la build 500 del editor.Pero en la nueva versión genera errores. Veo estos errores:bool TP?=true; // ошибка '?' - semicolon expected Y este dos veces.if(TP?) // ')' - unexpected token // ')' - ':' colon sign expected He mirado el manual de la nueva versión y el de la antigua, pero no he encontrado nada sobre el signo de interrogación.Pregunta: ¿qué significan estas operaciones y cómo corregirlas para que el código compile normalmente?Gracias de antemano. Cualquier pregunta de los [¡AVISO CERRADO!] Cualquier pregunta Errores, fallos, preguntas [Deleted] 2014.10.30 15:26 #7580 Hola! Podrían decirme por qué a veces tengo un operador ifle que no funciona. Aquí hay un ejemplo: double H3=ObjectGet ("H3 line", OBJPROP_PRICE1); int start() { double price = Bid; if (price==H3) { Alert ("Урааааа ", Symbol()); } return(0); }Donde: H3 es el valor del precio del nivel precio es el precio actual El resultado es que el precio alcanza este nivel (a veces incluso se detiene en él), pero la alerta no se dispara.¿Puede decirme cuál es el error? FOREX - Tendencias, previsiones Efecto de borde en Cualquier pregunta de los 1...751752753754755756757758759760761762763764765...1180 Nuevo comentario
Pasa el ";" por detrás del corchete.
El programa funciona, PERO ocasionalmente falla con el error 4108.
Ozero.
Abrir la ayuda, ver los errores de ejecución, y vemos:
4108
ERR_INVALID_TICKET
Número de billete incorrecto.
Piensa y busca...
Ayudar a la gente a operar en cada moneda con sus propias órdenes para distinguir y diferenciar + después de la orden abierta si el precio retrocede aún más podría abrir otra orden igual a la primera.
Hola a todos.
Acabo de darme cuenta de que NormalizeDouble funciona de forma extraña.
Es decir, el Asesor Experto funciona bien y no tiene errores, pero los registros en el Probador de Estrategias son muy extraños.
Te lo explicaré.
Calculo el beneficio utilizando esta función. Hago lo que creo que debería hacer NormalizeDouble(Profit,Digits);
Entonces imprimo(" profit=",DoubleToStrMorePrecision(Profit,8));
Como resultado, el registro muestra lo siguiente: "profit=0.88881912". Parece que es 0,88881000, ¿verdad?
¿O tal vez soy estúpido y hago algo mal?
Hola a todos.
Acabo de darme cuenta de que NormalizeDouble funciona de forma extraña.
Es decir, el Asesor Experto funciona bien y no tiene errores, pero los registros en el Probador de Estrategias son muy extraños.
Te lo explicaré.
Calculo el beneficio utilizando esta función. Hago lo que creo que debería hacer NormalizeDouble(Profit,Digits);
Entonces imprimo(" profit=",DoubleToStrMorePrecision(Profit,8));
Como resultado, el registro muestra el siguiente mensaje: "profit=0.88881912". Parece que es 0,88881000, ¿verdad?
¿O tal vez soy estúpido y hago algo mal?
¿Participa su valor de beneficio en las órdenes comerciales?
Sí, por supuesto. Y sin errores :-). Por eso me sorprendió.
Tengo la construcción 735.
El comercio es en la demo.
¡Aaaaaaaaah lo tengo! He olvidado la operación de asignación:-). "Beneficio=NormalizarDoble(Beneficio,Dígitos)".
Pero sigo sin entender por qué el EA no muestra errores ))
Tal vez el servidor redondea automáticamente .....
Pensé que NormalizeDouble era un procedimiento, no una función :-).
Poner ";" detrás de un paréntesis.
El programa funciona, PERO a veces falla con el error 4108.
Ozero.
De hecho, ¡hay que borrarlo!
De hecho, ¡debería eliminarse!
Boris, será mejor que le enseñes el código directamente, porque tenía demasiado sueño para recordar... ;)
Boris, será mejor que le enseñes el código directamente, porque tenía demasiado sueño para recordar... ;)
No quería abusar de tus derechos de autor. ;)
Y en serio, ¡algo no se pegó! ¡Pero lo probaré ahora!
¡Y ahora está funcionando! ¡Qué raro!
Hola! Podrían decirme por qué a veces tengo un operador ifle que no funciona.
Aquí hay un ejemplo:
Donde:
H3 es el valor del precio del nivel
precio es el precio actual
El resultado es que el precio alcanza este nivel (a veces incluso se detiene en él), pero la alerta no se dispara.
¿Puede decirme cuál es el error?