Trabajo finalizado
Plazo de ejecución 68 días
Tarea técnica
Hello !
I use the SS_SupportResistance indicator and I love it :
It draw zones based on Fractals.
But I would like to have Daily, Weekly and Monthly Pivot point supports (S1,S2,S3) and
resistances (R1,R2,R3) to be drawed as zone like the rests and merged when they overlap.
Daily, Weekly and Monthly should be switched with parameters.
This it the part that get the zone, it should be easy to add the
Pivot Points supports and resistances :
The whole indicator is attached.
void FindZones() { int i, j, shift, bustcount=0, testcount = 0; double hival, loval; bool turned = false, hasturned = false; double temp_hi[1000], temp_lo[1000]; int temp_start[1000], temp_hits[1000], temp_strength[1000], temp_count = 0; bool temp_turn[1000], temp_merge[1000]; int merge1[1000], merge2[1000], merge_count = 0; // iterate through zones from oldest to youngest (ignore recent 5 bars), // finding those that have survived through to the present... for (shift=MathMin(iBars(NULL, TimeFrame)-1, BackLimit); shift>IgnoreShift; shift--) { double atr = iATR(NULL, TimeFrame, 7, shift); double fu = atr/2 * zone_fuzzfactor; bool isWeak; bool touchOk = false; bool isBust = false; double close = iClose(NULL, TimeFrame, shift); double high = iHigh(NULL, TimeFrame, shift); double low = iLow(NULL, TimeFrame, shift); double hi_i; double lo_i; if (FastUpPts[shift] > 0.001) { // a zigzag high point isWeak = true; if (SlowUpPts[shift] > 0.001) isWeak = false; hival = high; if (zone_extend == true) hival += fu; loval = MathMax(MathMin(close, high-fu), high-fu*2); turned = false; hasturned = false; isBust = false; bustcount = 0; testcount = 0; for (i=shift-1; i>=0; i--) { hi_i = iHigh(NULL, TimeFrame, i); lo_i = iLow(NULL, TimeFrame, i); if ((turned == false && FastUpPts[i] >= loval && FastUpPts[i] <= hival) || (turned == true && FastDnPts[i] <= hival && FastDnPts[i] >= loval)) { // Potential touch, just make sure its been 10+candles since the prev one touchOk = true; for (j=i+1; j<i+11; j++) { if ((turned == false && FastUpPts[j] >= loval && FastUpPts[j] <= hival) || (turned == true && FastDnPts[j] <= hival && FastDnPts[j] >= loval)) { touchOk = false; break; } } if (touchOk == true) { // we have a touch. If its been busted once, remove bustcount // as we know this level is still valid & has just switched sides bustcount = 0; testcount++; } } if ((turned == false && hi_i > hival) || (turned == true && lo_i < loval)) { // this level has been busted at least once bustcount++; if (bustcount > 1 || isWeak == true) { // busted twice or more isBust = true; break; } if (turned == true) turned = false; else if (turned == false) turned = true; hasturned = true; // forget previous hits testcount = 0; } } if (isBust == false) { // level is still valid, add to our list temp_hi[temp_count] = hival; temp_lo[temp_count] = loval; temp_turn[temp_count] = hasturned; temp_hits[temp_count] = testcount; temp_start[temp_count] = shift; temp_merge[temp_count] = false; if (testcount > 3) temp_strength[temp_count] = ZONE_PROVEN; else if (testcount > 0) temp_strength[temp_count] = ZONE_VERIFIED; else if (hasturned == true) temp_strength[temp_count] = ZONE_TURNCOAT; else if (isWeak == false) temp_strength[temp_count] = ZONE_UNTESTED; else temp_strength[temp_count] = ZONE_WEAK; temp_count++; } } else if (FastDnPts[shift] > 0.001) { // a zigzag low point isWeak = true; if (SlowDnPts[shift] > 0.001) isWeak = false; loval = low; if (zone_extend == true) loval -= fu; hival = MathMin(MathMax(close, low+fu), low+fu*2); turned = false; hasturned = false; bustcount = 0; testcount = 0; isBust = false; for (i=shift-1; i>=0; i--) { hi_i = iHigh(NULL, TimeFrame, i); lo_i = iLow(NULL, TimeFrame, i); if ((turned == true && FastUpPts[i] >= loval && FastUpPts[i] <= hival) || (turned == false && FastDnPts[i] <= hival && FastDnPts[i] >= loval)) { // Potential touch, just make sure its been 10+candles since the prev one touchOk = true; for (j=i+1; j<i+11; j++) { if ((turned == true && FastUpPts[j] >= loval && FastUpPts[j] <= hival) || (turned == false && FastDnPts[j] <= hival && FastDnPts[j] >= loval)) { touchOk = false; break; } } if (touchOk == true) { // we have a touch. If its been busted once, remove bustcount // as we know this level is still valid & has just switched sides bustcount = 0; testcount++; } } if ((turned == true && hi_i > hival) || (turned == false && lo_i < loval)) { // this level has been busted at least once bustcount++; if (bustcount > 1 || isWeak == true) { // busted twice or more isBust = true; break; } if (turned == true) turned = false; else if (turned == false) turned = true; hasturned = true; // forget previous hits testcount = 0; } } if (isBust == false) { // level is still valid, add to our list temp_hi[temp_count] = hival; temp_lo[temp_count] = loval; temp_turn[temp_count] = hasturned; temp_hits[temp_count] = testcount; temp_start[temp_count] = shift; temp_merge[temp_count] = false; if (testcount > 3) temp_strength[temp_count] = ZONE_PROVEN; else if (testcount > 0) temp_strength[temp_count] = ZONE_VERIFIED; else if (hasturned == true) temp_strength[temp_count] = ZONE_TURNCOAT; else if (isWeak == false) temp_strength[temp_count] = ZONE_UNTESTED; else temp_strength[temp_count] = ZONE_WEAK; temp_count++; } } } // look for overlapping zones... if (zone_merge == true) { merge_count = 1; int iterations = 0; while (merge_count > 0 && iterations < 3) { merge_count = 0; iterations++; for (i = 0; i < temp_count; i++) temp_merge[i] = false; for (i = 0; i < temp_count-1; i++) { if (temp_hits[i] == -1 || temp_merge[j] == true) continue; for (j = i+1; j < temp_count; j++) { if (temp_hits[j] == -1 || temp_merge[j] == true) continue; if ((temp_hi[i] >= temp_lo[j] && temp_hi[i] <= temp_hi[j]) || (temp_lo[i] <= temp_hi[j] && temp_lo[i] >= temp_lo[j]) || (temp_hi[j] >= temp_lo[i] && temp_hi[j] <= temp_hi[i]) || (temp_lo[j] <= temp_hi[i] && temp_lo[j] >= temp_lo[i])) { merge1[merge_count] = i; merge2[merge_count] = j; temp_merge[i] = true; temp_merge[j] = true; merge_count++; } } } // ... and merge them ... for (i=0; i<merge_count; i++) { int target = merge1[i]; int source = merge2[i]; temp_hi[target] = MathMax(temp_hi[target], temp_hi[source]); temp_lo[target] = MathMin(temp_lo[target], temp_lo[source]); temp_hits[target] += temp_hits[source]; temp_start[target] = MathMax(temp_start[target], temp_start[source]); temp_strength[target] = MathMax(temp_strength[target], temp_strength[source]); if (temp_hits[target] > 3) temp_strength[target] = ZONE_PROVEN; if (temp_hits[target] == 0 && temp_turn[target] == false) { temp_hits[target] = 1; if (temp_strength[target] < ZONE_VERIFIED) temp_strength[target] = ZONE_VERIFIED; } if (temp_turn[target] == false || temp_turn[source] == false) temp_turn[target] = false; if (temp_turn[target] == true) temp_hits[target] = 0; temp_hits[source] = -1; } } } // copy the remaining list into our official zones arrays zone_count = 0; for (i=0; i<temp_count; i++) { if (temp_hits[i] >= 0 && zone_count < 1000) { zone_hi[zone_count] = temp_hi[i]; zone_lo[zone_count] = temp_lo[i]; zone_hits[zone_count] = temp_hits[i]; zone_turn[zone_count] = temp_turn[i]; zone_start[zone_count] = temp_start[i]; zone_strength[zone_count] = temp_strength[i]; if (zone_hi[zone_count] < Close[4]) zone_type[zone_count] = ZONE_SUPPORT; else if (zone_lo[zone_count] > Close[4]) zone_type[zone_count] = ZONE_RESIST; else { for (j=5; j<1000; j++) { if (iClose(NULL, TimeFrame, j) < zone_lo[zone_count]) { zone_type[zone_count] = ZONE_RESIST; break; } else if (iClose(NULL, TimeFrame, j) > zone_hi[zone_count]) { zone_type[zone_count] = ZONE_SUPPORT; break; } } if (j == 1000) zone_type[zone_count] = ZONE_SUPPORT; } zone_count++; } } }
Han respondido
1
Evaluación
Proyectos
93
49%
Arbitraje
18
56%
/
17%
Caducado
38
41%
Libre
2
Evaluación
Proyectos
1119
43%
Arbitraje
47
49%
/
23%
Caducado
84
8%
Libre
3
Evaluación
Proyectos
2820
80%
Arbitraje
156
22%
/
43%
Caducado
488
17%
Libre
Solicitudes similares
I have an indicator i need automated i use it manually and it plots arrows. Can you automate it for my Ninjatrader8? Do you need to see file? Expert Ninjatrader Developer can Bid for this project
I need a gold trading robot/bot
30+ USD
Hi! I need a trading bot/robot to automate my trades. I don't need much complicated bot. I want it to enter, exit trade and can do this in matter of second or multiple times in a second. Should be able to adjust, put SL/TP in the same menu. Would appreciate your ideas! Please write to me before anything else
Ninjatrader 8
30+ USD
Hello expert developer please i need someone who can code Buy Stop at the previous day's high and Sell Stop at the previous day's low. Breakeven and TSL function For Ninjatrader 8 please, i'll be looking forward to expert developer that can do it in just 1-2 days max and my budget is fixed please i only have $30 for this simple task
Hi, im not looking into developing a new EA. I am looking into purchasing an existing EA that can deliver such results like: mq5 source, 4‑year backtest (2022‑2025) report, equity curve, trade list, strategy description, and 1‑month demo access. Please without concrete prove of experience functioning existing EA working perfectly and as contained on my description, then we can't strike a deal. Thank you
Ultimate Quantum EA V1.01
30 - 350 USD
Title: Ultimate Quantum EA V1.01 | Dynamic Hedge Recovery System Description: Professional automated trading system designed for high-precision execution and advanced risk management. Key Features: Dynamic Hedge Recovery: Automatically manages losing trades by opening calculated hedge positions (2x-3x) to exit in total profit. Basket Profit Management: Closes all open positions once the total dollar profit target is
I am looking for an experienced MT5 (MQL5) Expert Advisor developer to fix a chart distortion / corruption issue in my existing EA ( EA ALPHA ). Issue Description When the EA is attached to the chart on a specific broker (ATFX), the chart becomes visually distorted The distortion appears on the left-hand side / historical area of the chart The same EA works correctly on other brokers (e.g. CFI) A previous developer
Tow experts for fixing
30+ USD
Subject: Experienced MQL5 Developer | High-Quality Execution & Error Handling "Hello, I am interested in developing your trading system. I specialize in building robust MQL5 Expert Advisors that are not only logically sound but also technically optimized for the MT5 platform. Why work with me? Error-Free Execution: I have deep experience in handling common MT5 execution errors such as Invalid Volume, Not Enough
I need a Developer to develop an EA
100+ USD
Hi, I have a specific set of rules and a strategy to execute a trade. I'm looking for a developer to assist me in developing an MQL5 EA based on my strategies
Hello Developers, I am looking for a professional and experienced MQL developer to assist with a project involving the conversion of an existing MT4 Expert Advisor to MT5, including its integrated news indicator. Project Details: Convert a fully working MT4 EA to MT5 EA includes a news filter/indicator that must function correctly on MT5 Source files are provided in a compressed file The EA is mainly optimized and
Project Overview We are seeking an experienced MetaTrader 5 (MT5) / MQL5 developer to design and build a production-ready Expert Advisor intended for live trading with capital at risk . This is not a hobby, experimental, or retail-grade EA. We are only interested in developers with proven experience delivering robust, well-tested MT5 systems . Project Objective Design and implement a high-quality MT5 Expert Advisor
Información sobre el proyecto
Presupuesto
65+ USD
Plazo límite de ejecución
a 5 día(s)
