Ayuda para crear estrategia de stops

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #114697 quote
    moha85
    Participant
    New

    Hola,

    Lo primero saludar a toda la gente ya que este es mi 1º post y creo que  no sera el último ya que me estoy iniciando en la creación de mi primer sistema de trading, y lo segundo dar las gracias a cualquier persona que me lea y me responda.

    Bueno, estoy intentando crear un sistema escalonado de stops, ya que por ejemplo cuando el precio alcance +10 puntos de beneficio, el stop se ponga ya automáticamente a +2 y el siguiente paso, si el precio alcance los +15 el stop se mueva a +5, etc..y ya alcanzado por ejemplo +20, que haya un tralling stop de 10 en 10 puntos o un seguimiento de porcentaje en 30%

    He estado buscando y leyendo algo al respecto y encontre este hilo https://www.prorealcode.com/blog/trading/complete-trailing-stop-code-function/  y me puse manos al lio, pero siempre el stop se coloca a +10 y cuando va a corto ni me coloca el los stops, me podeis ayudar?

    //trailing stop function
    trailingstart = 10 //trailing will start @trailinstart points profit
    trailingstep = 10 //trailing step to move the "stoploss"
    
    
    //reset the stoploss value
    IF NOT ONMARKET THEN
    newSL=0
    ENDIF
     
    //manage long positions
    IF LONGONMARKET THEN
    //+10 a +2
    IF newSL=0 AND close-tradeprice(1)>=trailingstart THEN
    newSL = tradeprice(1)+2
    ENDIF
    //+15 a +5
    IF newSL=tradeprice(1)+2 AND tradeprice(1)+15 THEN
    newSL = tradeprice(1)+5
    ENDIF
    //+20 a +10
    IF newSL=tradeprice(1)+5 AND tradeprice(1)+20 THEN
    newSL = tradeprice(1)+10
    ENDIF
    //+20 a seguimiento de tralling 10p
    IF newSL=tradeprice(1)+10 AND tradeprice(1)+20 THEN
    newSL = tradeprice(1)+trailingstep
    ENDIF
    ENDIF
    
    //manage short positions
    IF SHORTONMARKET THEN
    //+10 a +2
    IF newSL=0 AND tradeprice(1)-close>=trailingstart THEN
    newSL = tradeprice(1)-2
    ENDIF
    //+10 a +5
    IF newSL=tradeprice(1)-2 AND tradeprice(1)-10 THEN
    newSL = tradeprice(1)-5
    ENDIF
    //+20 a +10
    IF newSL=tradeprice(1)-5 AND tradeprice(1)-20 THEN
    newSL = tradeprice(1)-10
    ENDIF
    //+20 a seguimiento de tralling 10p
    IF newSL=tradeprice(1)-10 AND tradeprice(1)-20 THEN
    newSL = tradeprice(1)-trailingstep
    ENDIF
    ENDIF
     
    //stop order to exit the positions
    IF newSL>0 THEN
    SELL AT newSL STOP
    EXITSHORT AT newSL STOP
    ENDIF

    Gracias y un saludo

    #114717 quote
    Juan Salas
    Participant
    Master

    Hola moha85,

    Bienvenido a Prorealcode. A continuación pongo un trailing que yo utilizo y que te permite como quieres tener muchos pasos de trailing. Ejemplo: Si estas en LARGO y el precio sube, al cierre de la vela captura el máximo valor y en relación a ese valor te pone un STOP. A medida que el precio sube va subiendo el STOP, pero ya nunca vuelve atrás.

    Para poder personalizarlo, tienes que poner tus cantidades en pips/points en startbreakeven, que serán los valores del precio donde quieres que a partir de ahi, se empiecen a poner los STOP (pointstokeep).

    Este código es una simple modificación de uno que he ido cogiendo de la librería de PRC. Cuando te familiarices con la programación, podrás modificarlo como quieras. El código, como puedes ver es para largos y cortos. Los puntos de trailing (startbreakeven y pointstokeep) son los mismos para las dos direcciones.

    Espero que te sirva. Si tienes alguna duda, no tengas problema en volver a preguntar.

    Saludos,

    // TRAILING //////////////////////////////////////////////////////////////////////////////////////////////////////////
    startBreakeven1 =2
    startBreakeven2 =4
    startBreakeven3 =6
    startBreakeven4 =8
    startBreakeven5 =10
    startBreakeven6 =12
    startBreakeven7 =14
    startBreakeven8 =16
    startBreakeven9 =18
    startBreakeven10 =20
    
    startBreakeven11 =22
    startBreakeven12 =24
    startBreakeven13 =26
    startBreakeven14 =28
    startBreakeven15 =30
    startBreakeven16 =32
    startBreakeven17 =34
    startBreakeven18 =36
    startBreakeven19 =38
    startBreakeven20 =40
    
    //////////////////////
    
    PointsToKeep1 =2
    PointsToKeep2 =3
    PointsToKeep3 =4
    PointsToKeep4 =6
    PointsToKeep5 =7
    PointsTokeep6 =8
    PointsToKeep7 =8
    PointsToKeep8 =8
    PointsToKeep9 =10
    PointsTokeep10 =10
    
    PointsToKeep11 =10
    PointsToKeep12 =10
    PointsToKeep13 =12
    PointsToKeep14 =12
    PointsToKeep15 =12
    PointsTokeep16 =12
    PointsToKeep17 =14
    PointsToKeep18 =14
    PointsToKeep19 =14
    PointsTokeep20 =14
    
    //reset the breakevenLevel when no trade are on market
    IF NOT ONMARKET THEN
    breakevenLevel=0
    maxprice=0
    minprice=close
    ENDIF
    
    // LARGOS
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven1*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep1*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven2*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep2*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven3*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep3*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven4*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep4*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven5*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep5*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven6*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep6*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven7*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep7*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven8*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep8*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven9*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep9*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven10*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep10*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven11*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep11*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven12*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep12*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven13*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep13*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven14*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep14*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven15*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep15*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven16*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep16*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven17*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep17*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven18*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep18*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven19*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep19*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF LONGONMARKET THEN
    maxprice=max(maxprice,close)
    IF maxprice-tradeprice(1)>=startBreakeven20*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = maxprice-PointsToKeep20*pipsize
    ENDIF
    ENDIF
    
    
    // CORTOS
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven1*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep1*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven2*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep2*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven3*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep3*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven4*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep4*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven5*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep5*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven6*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep6*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven7*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep7*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven8*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep8*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven9*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep9*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven10*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep10*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven11*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep11*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven12*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep12*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven13*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep13*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven14*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep14*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven15*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep15*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven16*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep16*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven17*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep17*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven18*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep18*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven19*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep19*pipsize
    ENDIF
    ENDIF
    
    // test if the price have moved favourably of "startBreakeven" points already
    IF SHORTONMARKET THEN
    minprice=min(minprice,close)
    IF tradeprice(1)-minprice>=startBreakeven20*pipsize THEN
    //calculate the breakevenLevel
    breakevenLevel = minprice+PointsToKeep20*pipsize
    ENDIF
    ENDIF
    
    //place the new stop orders on market at breakevenLevel
    IF breakevenLevel>0 THEN
    SELL AT breakevenLevel STOP
    EXITSHORT AT breakevenLevel STOP
    ENDIF
    moha85 thanked this post
    #114757 quote
    moha85
    Participant
    New

    Muchisimas gracias de verdad Juan Salas,

    Solo he usa 6  startBreakeven y PointsToKeep, pero no se si realmente está haciendo bien lo que yo le he determinado, hay alguna manera visualizar ese seguimiento a través de un graph?

    Tambien me gustaria que pasado el starbreakeven6, este realice un trallingstop del 70%, pero imagino que esto sera ya otra función diferente, como sería esto?

    Otra cosilla que estoy buscando pero todavía no la he encontrado, podría usar esta función de breakeven pero determinado pasados X periodos desde la entrada del trade?

     

    Perdon por tantas preguntas, pero llevando tan solo 5 dias metido en el mundillo, me abrumo con tanta información en el foro

     

    De nuevo gracias por todo 🙂

    Un saludo

    #114769 quote
    Juan Salas
    Participant
    Master

    No sabría como verlo a través de la función graph en un backtest. En mi opinion, aunque rudimentaria, la mejor forma de visualizarlo es ponerlo en demo y ver como va moviéndose el stop loss a medida que avanza el precio.

    Si solo utilizas 6 pasos, puedes borrar o descomentar el resto. En cuanto a lo que me comentas del trailing, no sabría ahora mismo como hacerlo.

    En cuanto a que el breakeven entre después de x periodos, puedes probar lo siguiente:

    //place the new stop orders on market at breakevenLevel
    IF barindex-tradeindex(1)>=10 AND breakevenLevel>0 THEN
    SELL AT breakevenLevel STOP
    EXITSHORT AT breakevenLevel STOP
    ENDIF

    No lo he probado, pero sería algo parecido. Puedes cambiar el 10, por el numero de periodos que prefieras.

    Saludos

    #114803 quote
    moha85
    Participant
    New

    Gracias de verdad,

    Por lo que veo esa función está escrita para que entre el breakevenlevel1 a los 10 periodos, pero imagino que tendria que ponerlo también para el resto de breakeven,no? o ya solo con este afecta a los demás?

    Lo de visualizar el movimiento del breakeven, en el codigo de mi primer post, utiliza la función graph enlazado a newSL y si que funcionaba, ahora en este caso, no se como enlazarlo 🙁

    Lo de cubrir el 70% de ganancias después del breakeven6 ( es el ultimo que tengo puesto), quizás se podría reconducir esta función a un trallingstop que contenga esta función…

     

    Un saludo y de nuevo mil gracias!!

    #114837 quote
    Juan Salas
    Participant
    Master

    El breakevenlevel afecta a todos los niveles. Como puedes ver en cada escalón de precio el valor del STOP es breakevenlevel, así que no hay breakevenlevel1, 2, etc.

    En cuanto al graph, en vez de NewSL, ahora deberías poner “graph breakevenlevel”

    En cuanto a mantener el 70% de ganancia, puedes calcularlo de esta manera:

    si el startbreakeven8 (ejemplo) =100, el correspondiente pointstokeep8 sería=30. Dado que lo que hace el código es que una vez alcanza los 100 pips, pone el STOP LOSS a 100-30= 70pips en positivo desde el precio de compra. No tienes que hacerlo desde el principio. Los primeros pasos puedes poner los valores que creas, y a partir de un escalón determinado, podrías mantener la proporcionalidad del 70% en todos los pasos siguientes.

Viewing 6 posts - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.

Ayuda para crear estrategia de stops


ProOrder: Trading Automático y Backtesting

New Reply
Author
author-avatar
moha85 @moha85 Participant
Summary

This topic contains 5 replies,
has 2 voices, and was last updated by Juan Salas
6 years, 1 month ago.

Topic Details
Forum: ProOrder: Trading Automático y Backtesting
Language: Spanish
Started: 12/11/2019
Status: Active
Attachments: No files
Logo Logo
Loading...