Parabolica sar cambiando punto de inicio
Forums › ProRealTime foro Español › Soporte ProBuilder › Parabolica sar cambiando punto de inicio
- This topic has 2 replies, 2 voices, and was last updated 1 day ago by
PedroJimenez.
-
-
10/01/2025 at 9:59 AM #252050
Buenos días me gustaría hacer un indicador que cuando la parabolica sar se encuentre debajo del precio, del punto extremo (máximo de la tendencia de la parabólica sar) me inicia una parabólica sar diferente pero al contrario es decir que su caída sea a la baja al contrario de lo que hace naturalmente y al revés. Adjunto código por si serviría ya que lo inicio pero no se como terminarlo.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192DEFPARAM DrawOnLastBarOnly = true// --- Parámetros ---ONCE SARinit = 0.02ONCE SARstep= 0.02ONCE SARlimit = 0.2ONCE Ticki= 0.02// ---------- SAR normal ----------psar = SAR[SARinit,SARstep,SARlimit]// ---------- Punto Extremo (PE) ----------ONCE contador= 0ONCE cuenta= 0ONCE tendenciaPrev= 0ONCE PE = closeC1 = close > psarC2 = close < psarIF C1 AND NOT C1[1] THENcontador = 1tendenciaPrev = 1ELSIF C2 AND NOT C2[1] THENcuenta = 1tendenciaPrev = -1ELSIF tendenciaPrev = 1 THENcontador = contador[1] + 1ELSIF tendenciaPrev = -1 THENcuenta = cuenta[1] + 1ENDIFIF C1 THENIF contador > 1 THENPE = HIGHEST[contador](HIGH)ELSEPE = HIGHENDIFELSIF C2 THENIF cuenta > 1 THENPE = LOWEST[cuenta](LOW)ELSEPE = LOWENDIFENDIFnewPE = (PE <> PE[1])ONCE lastPEbar = 0ONCE PEseed = PEONCE dirSeed= 0IF newPE THENlastPEbar = BarIndexPEseed= PEIF PE > psar THENdirSeed = -1ELSEdirSeed =1ENDIFENDIFONCE invParabolic = PEONCE invIsLong = 1ONCE invAF = SARinitONCE invHP = HIGHONCE invLP = LOWinvFlipped = 0IF newPE THENinvParabolic = PEinvAF = SARinitIF PE > psar THENinvIsLong = 0invLP= LOWinvHP= PEELSEinvIsLong = 1invHP= HIGHinvLP= PEENDIFELSEIF invIsLong THENinvParabolic = invParabolic + invAF * (invHP - invParabolic)invParabolic = MIN(invParabolic, LOW[1])invParabolic = MIN(invParabolic, LOW[2])invFlipped = 0IF LOW < invParabolic THENinvIsLong= 0invFlipped= 1invParabolic = invHPinvLP= LOWinvAF= SARinitENDIFIF NOT invFlipped THENIF HIGH > invHP THENinvHP = HIGHinvAF = MIN(invAF + SARstep, SARlimit)ENDIFENDIFELSEinvParabolic = invParabolic + invAF * (invLP - invParabolic)invParabolic = MAX(invParabolic, HIGH[1])invParabolic = MAX(invParabolic, HIGH[2])invFlipped = 0IF HIGH > invParabolic THENinvIsLong = 1invFlipped= 1invParabolic = invLPinvHP= HIGHinvAF = SARinitENDIFIF NOT invFlipped THENIF LOW < invLP THENinvLP = LOWinvAF = MIN(invAF + SARstep, SARlimit)ENDIFENDIFENDIFENDIFlenUp = MAX(contador, 1)lenDown = MAX(cuenta, 1)// InicializaPEactual = closePEcontra = closeIF C1 THENIF contador > 1 THENPEactual = HIGHEST[lenUp](HIGH)ELSEPEactual = HIGHENDIFIF contador > 1 THENPEcontra = LOWEST[lenUp](LOW)ELSEPEcontra = LOWENDIFELSIF C2 THENIF cuenta > 1 THENPEactual = LOWEST[lenDown](LOW)ELSEPEactual = LOWENDIFIF cuenta > 1 THENPEcontra = HIGHEST[lenDown](HIGH)ELSEPEcontra = HIGHENDIFELSEPEactual = closePEcontra = closeENDIFDRAWHLINE(PEactual) COLOURED(0,128,255)DRAWHLINE(PEcontra) COLOURED(255,128,0)ONCE lastBarIndex = 0lastBarIndex = MAX(lastBarIndex, BarIndex)IF BarIndex = lastBarIndex THENstartBar = MAX(lastPEbar, 0)IF startBar <= lastBarIndex THENFOR k = startBar TO lastBarIndex DOsteps = k - startBary = PEseed + dirSeed * steps * TickiDRAWTEXT("■", k, y, Dialog, Bold, 11) COLOURED(0,0,200)NEXTENDIFENDIFRETURN10/02/2025 at 9:12 AM #252089Buenas. No sé si lo he entendido bien… te paso mi propuesta:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273increment = 0.02initial = 0.02limite = 0.2IF BARINDEX < 2 THENLparabolic = LOWislong = 1af = limitehp = HIGHlp = LOWinvLparabolic = lowELSEIF islong THENLparabolic = Lparabolic + af * (hp - Lparabolic)Lparabolic = MIN(Lparabolic, LOW[1])Lparabolic = MIN(Lparabolic, LOW[2])invLparabolic = invLparabolic - af * (hp - Lparabolic)ELSESparabolic=Sparabolic + af * (lp - Sparabolic)Sparabolic=MAX(Sparabolic, HIGH[1])Sparabolic=MAX(Sparabolic, HIGH[2])InvSparabolic=InvSparabolic - af * (lp - Sparabolic)ENDIFreverse = 0IF islong THENIF LOW < Lparabolic THENislong = 0reverse = 1Sparabolic = hplp = LOWaf = initialInvSparabolic = hpENDIFELSEIF HIGH > Sparabolic THENislong = 1reverse =1Lparabolic = lphp = HIGHaf = initialinvLparabolic = lpENDIFENDIFIF NOT reverse THENIF islong THENIF HIGH > hp THENhp = HIGHaf = af + incrementaf = MIN (af,limite)ENDIFELSEIF LOW < lp THENlp = LOWaf = af + incrementaf = MIN (af,limite)ENDIFENDIFENDIFENDIFIf isLong thenDRAWPOINT(barindex, Lparabolic, 2) Coloured(0,255,0)DRAWPOINT(barindex, invLparabolic, 2) Coloured(0,255,255)EndIfIf NOT isLong thenDRAWPOINT(barindex,Sparabolic,2) Coloured(255,0,0)DRAWPOINT(barindex,invSparabolic,2) Coloured(255,0,255)EndIfReturn1 user thanked author for this post.
10/02/2025 at 9:38 PM #252124Buenas, no quiero algo asi como este indicador que solo en la tendencia actual de la parabolica sar me dibuje una sar en el PE y vaya hacia el lado contrario de la parabolica sar y ademas que si la rebasa el precio cambie de posicion como haria una parabolica sar normal solo que inicie del PE como en la imagen, adjunto el codigo :
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198//---------------------------------------------// PARABÓLICA PERSONALIZADA ANCLADA A PE// (Incluye cálculo de PSAR y PE original)// Pintado SOLO desde el último PE (sin cambiar tu lógica)//---------------------------------------------DEFPARAM DrawOnLastBarOnly = true//==== Parámetros PSAR / Parabólicaincrement = 0.02initial = 0.02limite = 0.2//==== PSAR basepsar = SAR[0.02, 0.02, 0.2]//==== Cálculo de PE (tal cual tu lógica original)C1 = close > psarC2 = close < psarIF barindex = 0 THENCONTADOR = 0CUENTA = 0TENDENCIAANTERIOR = 0PE = close// >>> NUEVO: tracking del último PE y de la última barraONCE lastPEbar = 0ONCE lastBarIndex = 0ENDIF// Actualizamos la última barra vistalastBarIndex = MAX(lastBarIndex, barindex)IF C1 AND NOT C1[1] THENCONTADOR = 1TENDENCIAANTERIOR = 1ELSIF C2 AND NOT C2[1] THENCUENTA = 1TENDENCIAANTERIOR = -1ELSIF TENDENCIAANTERIOR = 1 THENCONTADOR = CONTADOR[1] + 1ELSIF TENDENCIAANTERIOR = -1 THENCUENTA = CUENTA[1] + 1ENDIFIF C1 THENIF CONTADOR > 1 THENPE = HIGHEST[CONTADOR](HIGH)ELSEPE = HIGHENDIFENDIFIF C2 THENIF CUENTA > 1 THENPE = LOWEST[CUENTA](LOW)ELSEPE = LOWENDIFENDIF// >>> NUEVO: detectar nuevo PE para anclar el dibujonewPE = (PE <> PE[1])IF newPE THENlastPEbar = barindexENDIF//==== Variables de la parabólica anclada a PE (TU LÓGICA)IF barindex = 0 THENisLong = 1af = initialhp = highlp = lowLparabolic = PEinvLparabolic = PESparabolic = PEinvSparabolic = PE// (Tenías startDraw; lo mantenemos pero NO lo usamos para pintar)startDraw = 0ENDIF// Si en las primeras velas se detecta claramente C1/C2, ajustamos isLong y puntos de arranque (TU LÓGICA)IF barindex = 1 THENIF C1 THENisLong = 1Lparabolic = PEinvLparabolic = PEhp = HIGHaf = initialstartDraw = barindex// >>> anclamos también el PE de arranquelastPEbar = barindexELSIF C2 THENisLong = 0Sparabolic = PEinvSparabolic = PElp = LOWaf = initialstartDraw = barindex// >>> anclamos también el PE de arranquelastPEbar = barindexENDIFENDIF//==== Actualización en cada barra (TU LÓGICA INTACTA)IF barindex >= 2 THEN// Evolución de la curva según tendencia vigenteIF isLong THEN// LargosLparabolic = Lparabolic + af * (hp - Lparabolic)Lparabolic = MIN(Lparabolic, LOW[1])Lparabolic = MIN(Lparabolic, LOW[2])invLparabolic = invLparabolic - af * (hp - Lparabolic)ELSE// CortosSparabolic = Sparabolic + af * (lp - Sparabolic)Sparabolic = MAX(Sparabolic, HIGH[1])Sparabolic = MAX(Sparabolic, HIGH[2])invSparabolic = invSparabolic - af * (lp - Sparabolic)ENDIFreverse = 0//---- Detección de giro y nuevo arranque en PE (TU LÓGICA)IF isLong THEN// Giro LARGO -> CORTOIF LOW < Lparabolic THENisLong = 0reverse = 1// Nuevo tramo: arranca en PESparabolic = PEinvSparabolic = PElp = LOWaf = initialstartDraw = barindex // tú lo tenías así// >>> y anclamos el dibujo al PE del girolastPEbar = barindexENDIFELSE// Giro CORTO -> LARGOIF HIGH > Sparabolic THENisLong = 1reverse = 1// Nuevo tramo: arranca en PELparabolic = PEinvLparabolic = PEhp = HIGHaf = initialstartDraw = barindex // tú lo tenías así// >>> y anclamos el dibujo al PE del girolastPEbar = barindexENDIFENDIF//---- Gestión del AF si no hay giro (TU LÓGICA)IF NOT reverse THENIF isLong THENIF HIGH > hp THENhp = HIGHaf = af + incrementaf = MIN(af, limite)ENDIFELSEIF LOW < lp THENlp = LOWaf = af + incrementaf = MIN(af, limite)ENDIFENDIFENDIFENDIF//=======================================================//==== PINTADO SOLO EN LA ÚLTIMA BARRA DESDE EL ÚLTIMO PE//==== (USANDO TUS SERIES YA CALCULADAS; SIN RE-CALCULAR)//=======================================================IF barindex = lastBarIndex THEN// seguridad por si lastPEbar no se ha fijado aúnstartBar = MAX(lastPEbar, 0)IF startBar <= lastBarIndex THENFOR k = startBar TO lastBarIndex DO// offset relativo para tomar el valor de tus series en la barra kidx = lastBarIndex - kIF isLong THENy = invLparabolic[idx]DRAWPOINT(k, y, 2) COLOURED(0,255,255)ELSEy = invSparabolic[idx]DRAWPOINT(k, y, 2) COLOURED(255,0,255)ENDIFNEXTENDIFENDIFRETURN -
AuthorPosts
Find exclusive trading pro-tools on