
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Realmente aprecio la ayuda que tú y todos los demás estáis proporcionando. He intentado todo en los últimos días para conseguir que se compile y me disculpo por no haber preguntado. La mayoría de vosotros habéis sugerido que deje de usar mi propio código y use el de otros, pero no voy a aprender si no entiendo lo que estoy haciendo mal. A mí me parece que mi código es correcto. Le pido que cuente las órdenes por posición y que seleccione sólo las que cumplen mis criterios y que luego modifique esa operación concreta. Hasta ahora, después de 4 páginas nadie me ha señalado qué línea de mi código está rota. A menos que primero vea y entienda lo que estoy haciendo mal, no me servirá de nada aprender usando el código de otra persona. Mi objetivo ahora no es tener un EA de Trailingstop que funcione, porque hay muchos por ahí, sino que yo aprenda a codificar, para poder seguir adelante. De hecho, mi código era casi idéntico al código que Jimdandy publicó en su Tutorial de Youtube sobre Trailingstops. Como es prácticamente idéntico al suyo, copié el código casi al pie de la letra (excepto que quiero operar manualmente), pero su código sólo funciona a veces también.
He imprimido algunas cosas. Este comercio es casi 300 puntos más allá del punto donde especifiqué que el Trailingstop entra en acción(que era 150 puntos):
2016.04.22 00:18:02.301 Trailing_v33 EURAUD,M15: OrderModify = false
2016.04.22 00:18:02.301 Trailing_v33 EURAUD,M15: Ask = 1.45926
2016.04.22 00:18:02.301 Trailing_v33 EURAUD,M15: Selectbypos = 0
2016.04.22 00:18:02.301 Trailing_v33 EURAUD,M15: Selectbyticket = 1
2016.04.22 00:18:02.301 Trailing_v33 EURAUD,M15: OrderTicket = 50381828
2016.04.22 00:18:02.301 Trailing_v33 EURAUD,M15: ticket = 0
2016.04.22 00:18:02.301 Trailing_v33 EURAUD,M15: OrderSelect = true
2016.04.22 00:18:02.301 Trailing_v33 EURAUD,M15: OrdersTotal = 16
2016.04.22 00:18:02.301 Trailing_v33 EURAUD,M15: OrderSymbol = EURUSD
2016.04.22 00:18:02.301 Trailing_v33 EURAUD,M15: OrderTicket = 50381828
2016.04.22 00:17:58.934 Trailing_v33 EURAUD,M15: OrderModify = false
Este EA sólo está colocado en el EURAUD. Como puede ver hay 16 órdenes abiertas en otros 9 gráficos. El número de ticket seleccionado para este par es completamente erróneo y el OrderSymbol es completamente erróneo. Ambos son para una orden abierta en el EURUSD. Basado en lo anterior, mi bucle for seleccionó la posición 0 en este caso, mientras que el EURAUD que debía seleccionar estaba en la posición 14 (15-1). ¿Por qué? Le dije que ignorara esto.
En el video mencionado anteriormente Jim realmente se mete en este problema, y dijo que utiliza el siguiente código para superar mi problema, sin embargo, este es un contador para enviar correctamente las órdenes y no una función para filtrar las órdenes. Traté de usarlo como un filtro, pero no tuvo éxito.
Mi código ahora se ve así. ¿Podría alguien criticar mi código para que pueda aprender de esto y decirme por qué no funciona en múltiples gráficos. Sé que no puede ser tan malo porque en realidad funciona perfectamente a veces.Gracias
Hasta ahora, después de 4 páginas nadie ha señalado qué línea de mi código está rota.
No es cierto. Hemos descrito tus errores y te hemos ofrecido soluciones para ellos de muchas formas y alternativas. Sin embargo, las ignoras y sigues haciéndolo a TU MANERA. No sólo eso, sino que ahora incluso lo has empeorado añadiendo más errores.
Cuando un pintor aprende a pintar, lo hace copiando primero las técnicas de otros que lo han dominado. Sólo cuando se siente cómodo con estas técnicas, empieza a crear su PROPIA FORMA de pintar.
He aquí una breve lista de "mis críticas":
Hay más cosas que podría enumerar, pero arregla estas al menos, ¡de una vez por todas!
La codificación es como cualquier otro lenguaje. Sí, puedes encadenar palabras, pero eso no te convierte en poeta. En la codificación también hay que tener ritmo y estructura, para que sea legible y funcional.
Aquí está una breve lista de "mi crítica":
En realidad tenía corchetes para todas mis sentencias 'if' inicialmente según el código que publiqué aquí antes, pero como ese código no funcionaba probé otras cosas, que incluían copiar el código que pegué en mi post anterior. Como mencioné, este código ni siquiera es mío, pero tampoco funciona en todos los pares. Sin embargo, volveré a reemplazar los paréntesis y seguiré los otros consejos. Mientras tanto, aprendí que OrderSelect imprimirá el símbolo de la primera orden en la terminal y no en la que está el EA, así que en realidad no estaba mal.
EDIT: Gracias por la sugerencia #3!!!!!!! Creo que este era el problema, porque la Orden debe ser seleccionada primero por el Símbolo y LUEGO el valor debe ser almacenado. Así que moví la variable a debajo de esas funciones como abajo, y parece que ahora funciona (pero se requieren más pruebas antes de saber con certeza
En realidad tenía corchetes para todas mis sentencias 'if' inicialmente según el código que publiqué aquí antes, pero como ese código no funcionó probé otras cosas, que incluían copiar el código que pegué en mi post anterior. Como mencioné, este código ni siquiera es mío, pero tampoco funciona en todos los pares. Sin embargo, volveré a reemplazar los paréntesis y seguiré los otros consejos. Mientras tanto, aprendí que OrderSelect imprimirá el símbolo de la primera orden en la terminal y no en la que está el EA, así que en realidad no estaba mal.
EDIT: Gracias por la sugerencia #3!!!!!!! Creo que este era el problema, porque la Orden debe ser seleccionada primero por el Símbolo y LUEGO el valor debe ser almacenado. Así que moví la variable a debajo de esas funciones como abajo, y parece que ahora funciona (pero se requieren más pruebas antes de saber con certeza
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()!= Symbol()) continue;
double Pip=Point*10, TSTP=TrailingStart*Pip, Trail=TrailingStop*Pip, SL=StopLoss*Pip;
if(OrderType()==OP_BUY){
if(Bid-OrderOpenPrice()>TSTP){
if(OrderStopLoss()<Bid-Trail){
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Trail, OrderTakeProfit(), Orange))
Print("Error Buy TrailingStop: ",GetLastError());
}
}
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()!= Symbol()) continue;
// Everything below is executed if NO order is selected or a selected order is symbol
double Pip=Point*10, TSTP=TrailingStart*Pip, Trail=TrailingStop*Pip,SL=StopLoss*Pip;
if(OrderType()==OP_BUY)
&& Bid-OrderOpenPrice()>TSTP)
&& OrderStopLoss()<Bid-Trail){
if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid-Trail, OrderTakeProfit(), Orange))
Print("Error Buy TrailingStop: ",GetLastError());
}
:
Ahora quizás entiendas mi "dura crítica " cuando hacen perder el tiempo a todo el mundo. Si bien entiendo "cosas simples " que piensan que es aceptable para perder el tiempo de todos, no lo hago.
Sí. Desgraciadamente, ¡parece que tienes razón!
Gracias por las respuestas.Así que, he cambiado el código de nuevo a una versión anterior como por debajo. Con él como este parece estar trabajando perfectamente en todos los pares donde el stoplevel es de 50 puntos, pero no en los pares donde el stoplevel es más alto por ejemplo, EURAUD incluso si las variables externas es mayor que el stoplevel. Así que esto es extraño
También he encontrado otro EA que tiene un código muy similar al mío y he comparado el código. He destacado las principales diferencias.
1. Incrementos en lugar de decrementos
2. Multiplica todo por Punto en lugar de Punto*10
3. Suma el Trailingstop y el Trailingstep juntos y luego resta uno y modifica la orden con el Trailingstep. Si entiendo esto correctamente, el Trailingstart se activará después de un movimiento de 15 pips (150 puntos). En mi EA, el precio se retrasará 5 pips y se detendrá si el precio cae de nuevo y alcanza este nivel de 5 pips. En su EA, también se activará después de 15 pips, pero la cantidad de pips que se retrasa es de 19 (15+5-1), por lo que el precio tiene que caer 19 pips para detenerse. Como ejemplo: OrderOpenPrice es 1.50000. El precio sube 150 puntos hasta 1.50150, lo que activa el Trailingstop. Si el precio vuelve a caer hasta 1.50100, se detendrá con un beneficio de 5 pips. En su EA, el Trailingstop también se activa en 1,50150, pero el rastro está en 1,49960, lo que creo que provocaráel error 130, ya que el stop está demasiado cerca del stoplevel. ¿O estoy entendiendo mal?
¿Podría ser mi problema con uno o más de estos?
También encontré otro EA que tiene un código muy similar al mío y comparé el código.
¡Vamos a ver si entiendo esta lógica tuya! ¡Usted está dispuesto a encontrar otro EA de alguien más de quién sabe dónde y está dispuesto a incorporar ese código en el suyo, PERO NO ESTÁ DISPUESTO a tomar el código que fue escrito específicamente para ayudarle y corregir sus problemas!
¡WOW! ¡Qué lógico de tu parte! ¿Dónde está SPOCK cuando se le necesita?
¡SPOCK, que descanses en paz! ¡Todos te echamos de menos!
¡Vamos a ver si entiendo esta lógica tuya! ¡¡¡Estás dispuesto a encontrar otro EA de alguien más de quién sabe dónde y estás dispuesto a incorporar ese código en el tuyo, PERO NO ESTÁS DISPUESTO a tomar el código que fue escrito específicamente para ayudarte y corregir tus problemas!!!
¡WOW! ¡Qué lógico de tu parte! ¿Dónde está SPOCK cuando se le necesita?
¡SPOCK, que descanses en paz! ¡Todos te echamos de menos!