IQ_WIKI_SCRIP_V1.1.0

← All 56 scripts

  • Momentum
  • Signal engine
  • On price
  • Advanced

A completed-candle adaptation of the regular IQOptionWiki Signals score. It weighs RSI, MACD, Bollinger %B, five directional candle patterns and optional chart-volume confirmation into one score and marks new qualifying setups.

  • File IQ_WIKI_SCRIP_V1.1.0.lua
  • Version 1.1.0
  • Size 419 lines · 13 KB
  • Timeframes 1-minute to 15-minute candles
  • License MIT
IQ_WIKI_SCRIP_V1.1.0 drawn on synthetic candles
How the script draws, shown on synthetic candles generated for testing. It is an illustration of the markers and lines, not real market data or a result.

The rules

HIGHER marker

The weighted score is at least +2 with a quality of 3 or more on a completed candle, and the setup is new (false on the candle before).

LOWER marker

The weighted score is at most -2 with a quality of 3 or more on a completed candle, and the setup is new.

A marker appears after the next candle opens and is drawn on the candle that completed the setup. It is a chart observation, not an instruction to trade.

How to read it

Bollinger Bands are drawn on price. A green HIGHER or red LOWER marker appears under or above the candle that completed a new qualifying setup. Zero MACD and zero total delta stay neutral.

Indicators used

  • RSI
  • MACD
  • Bollinger %B (population deviation)
  • Five candlestick patterns
  • Optional chart volume

Same view with built-in indicators: Bollinger Bands (20, 2), RSI (14) and MACD (12, 26, 9) show the same ingredients with IQ Option's built-in indicators.

Default settings

Minimum score2
Minimum quality3
Volume confirmationoptional
Platform adviceoff

Every value is an input in the script settings. Platform advice is off by default.

Key points

  1. This is the local version of the IQOptionWiki Signals score, running on the IQ Option chart itself.
  2. It combines RSI, MACD, Bollinger %B and five candle patterns into one weighted score.
  3. A marker needs a score of at least two and a quality of three on a completed candle.
  4. It uses only the active chart's data: no API, no Telegram, no external feed.
  5. Platform advice is off by default; enable it in one script at a time if you want notifications.

Limitations. The score is deterministic arithmetic, not a probability. QCS initialization can differ slightly from the Signals server's fixed 120-candle seed, so a marker can differ from the web service. Test on the Practice balance before risking real funds.

Learn the strategy: read the full guide on IQOptionWiki →

Install it in four steps

  1. Download and inspectDownload one .lua file and open it in a plain-text editor if you want to read it first. If you downloaded the ZIP, extract it.
  2. Open Chart Analysis → ScriptsIn the IQ Option traderoom, choose the Practice balance, open the chart analysis panel, select Scripts and choose Import script.
  3. Save and add to chartSelect the downloaded file, review the imported code, choose Save, then use the + control to add it to the chart.
  4. Change one input at a timeConfirm the default view first. Then adjust periods, levels or colours one setting at a time and note what changes.

Complete source code

The download and this preview resolve to the same reviewed file. SHA-256: 98702b0378074204ac968a550dd76d477bf1b1bebe0888ca1b301c8db3755855

-- SPDX-License-Identifier: MIT
-- IQOptionWiki QCS Library
-- IQ_WIKI_SCRIP_V1.1.0
--
-- Local, completed-candle adaptation of the regular iqoptionwiki.com Signals
-- confluence engine. It combines:
--   1. RSI mean-reversion scoring
--   2. MACD direction
--   3. Bollinger %B mean-reversion scoring
--   4. Five directional candle patterns (neutral Doji is omitted)
--   5. Optional IQ Option chart-volume confirmation
--
-- Deliberate V1.1 safety corrections:
--   * Signals use the previous completed candle, never the open candle.
--   * A zero MACD histogram and a zero final score stay neutral.
--   * A marker/advice pulse appears only when a new qualifying setup starts.
--   * No external API, provider price, web confidence, timer, or expiry is used.
--
-- HIGHER and LOWER are analysis markers, not orders or outcome guarantees.
-- Test on a Practice balance and enable advice in only one script at a time.

instrument {
    name = "IQ_WIKI_SCRIP_V1.1.0",
    short_name = "IQ WIKI SIGNALS",
    icon = "indicators:RSI",
    overlay = true
}

input_group {
    "1. Regular Signals engine",
    rsi_period = input (14, "RSI period", input.integer, 2, 100),
    macd_fast_period = input (12, "MACD fast EMA", input.integer, 2, 100),
    macd_slow_period = input (26, "MACD slow EMA", input.integer, 3, 200),
    macd_signal_period = input (9, "MACD signal EMA", input.integer, 2, 100),
    bollinger_period = input (20, "Bollinger period", input.integer, 5, 200),
    bollinger_deviation = input (2.0, "Bollinger deviations", input.double, 0.5, 5.0, 0.1, false),
    volume_period = input (20, "Volume average period", input.integer, 2, 200)
}

input_group {
    "2. Signal quality",
    minimum_score = input (2.0, "Minimum absolute score", input.double, 0.5, 10.0, 0.5, false),
    minimum_quality = input (3.0, "Minimum quality (1 to 5)", input.double, 1.0, 5.0, 0.5, false)
}

input_group {
    "3. Display and advice",
    bands_visible = input { default = true, name = "Show Bollinger Bands", type = input.plot_visibility },
    signals_visible = input { default = true, name = "Show completed-candle signals", type = input.plot_visibility },
    advice_enabled = input { default = false, name = "Enable platform advice", type = input.boolean }
}

input_group {
    "Band colors",
    upper_band_color = input { default = rgba(255, 108, 88, 0.55), type = input.color },
    middle_band_color = input { default = rgba(255, 255, 255, 0.32), type = input.color },
    lower_band_color = input { default = rgba(37, 225, 84, 0.55), type = input.color },
    band_width = input { default = 1, type = input.line_width }
}

input_group {
    "Signal colors",
    higher_color = input { default = "#25E154", type = input.color },
    lower_color = input { default = "#FF6C58", type = input.color },
    signal_text_color = input { default = "#FFFFFF", type = input.color }
}

-- Indicator series. These intentionally use the chart's own IQ Option data.
rsi_value = rsi (close, rsi_period)

macd_fast = ema (close, macd_fast_period)
macd_slow = ema (close, macd_slow_period)
macd_line = macd_fast - macd_slow
macd_signal = ema (macd_line, macd_signal_period)
macd_histogram = macd_line - macd_signal

bollinger_middle = sma (close, bollinger_period)
-- QCS stdev() uses sample deviation; the Signals service uses population
-- deviation. This factor preserves the service's Bollinger calculation.
bollinger_population_factor = math.sqrt ((bollinger_period - 1) / bollinger_period)
bollinger_spread =
    stdev (close, bollinger_period) *
    bollinger_population_factor *
    bollinger_deviation
bollinger_upper = bollinger_middle + bollinger_spread
bollinger_lower = bollinger_middle - bollinger_spread

volume_average = sma (volume, volume_period)

-- Read scalar values before using native Lua conditions.
local close_now = get_value (close, 0)
local open_now = get_value (open, 0)
local high_now = get_value (high, 0)
local low_now = get_value (low, 0)
local previous_close = get_value (close [1], 0)
local previous_open = get_value (open [1], 0)
local previous_high = get_value (high [1], 0)
local previous_low = get_value (low [1], 0)
local first_close = get_value (close [2], 0)
local first_open = get_value (open [2], 0)
local first_high = get_value (high [2], 0)
local first_low = get_value (low [2], 0)

local rsi_now = get_value (rsi_value, 50)
local macd_now = get_value (macd_line, 0)
local macd_signal_now = get_value (macd_signal, 0)
local macd_histogram_now = get_value (macd_histogram, 0)
local upper_now = get_value (bollinger_upper, 0)
local middle_now = get_value (bollinger_middle, 0)
local lower_now = get_value (bollinger_lower, 0)
local volume_now = get_value (volume, 0)
local volume_average_now = get_value (volume_average, 0)

local warmup_index =
    math.max (
        rsi_period + 1,
        macd_slow_period + macd_signal_period,
        bollinger_period,
        volume_period
    )
local warmup_close = get_value (close [warmup_index], 0)

local periods_are_valid =
    macd_fast_period < macd_slow_period and
    bollinger_deviation > 0 and
    minimum_score > 0 and
    minimum_quality >= 1 and
    minimum_quality <= 5

local data_is_ready =
    periods_are_valid and
    warmup_close > 0 and
    close_now > 0 and
    high_now >= low_now and
    upper_now > lower_now and
    middle_now > 0

-- Five directional definitions mirror the local Signals service. Its Doji
-- pattern is neutral and adds zero to the score, so it is intentionally absent.
local current_range = high_now - low_now
local current_body = math.abs (close_now - open_now)
local previous_body = math.abs (previous_close - previous_open)
local first_body = math.abs (first_close - first_open)

local current_bullish = close_now > open_now
local current_bearish = close_now < open_now
local previous_bullish = previous_close > previous_open
local previous_bearish = previous_close < previous_open

local bullish_engulfing =
    previous_bearish and
    current_bullish and
    open_now <= previous_close and
    close_now >= previous_open

local bearish_engulfing =
    previous_bullish and
    current_bearish and
    open_now >= previous_close and
    close_now <= previous_open

local current_body_low = math.min (open_now, close_now)
local current_body_high = math.max (open_now, close_now)
local previous_body_low = math.min (previous_open, previous_close)
local previous_body_high = math.max (previous_open, previous_close)

local bullish_harami =
    previous_body > 0 and
    current_body > 0 and
    current_body_high <= previous_body_high and
    current_body_low >= previous_body_low and
    previous_bearish and
    current_bullish

local bearish_harami =
    previous_body > 0 and
    current_body > 0 and
    current_body_high <= previous_body_high and
    current_body_low >= previous_body_low and
    previous_bullish and
    current_bearish

local lower_shadow = current_body_low - low_now
local upper_shadow = high_now - current_body_high
local bullish_hammer =
    current_range > 0 and
    current_body > 0 and
    lower_shadow >= current_body * 2 and
    upper_shadow <= current_body

local first_midpoint = (first_open + first_close) / 2
local bullish_morning_star =
    first_close < first_open and
    first_body > 0 and
    previous_body <= first_body * 0.5 and
    current_bullish and
    close_now > first_midpoint

local bearish_evening_star =
    first_close > first_open and
    first_body > 0 and
    previous_body <= first_body * 0.5 and
    current_bearish and
    close_now < first_midpoint

-- Regular Signals weighted score.
local score = 0
local rsi_direction = 0
local macd_direction = 0
local bollinger_direction = 0
local pattern_direction = 0

if rsi_now >= 80 then
    score = score - 2
    rsi_direction = -1
elseif rsi_now >= 70 then
    score = score - 1
    rsi_direction = -1
elseif rsi_now <= 20 then
    score = score + 2
    rsi_direction = 1
elseif rsi_now <= 30 then
    score = score + 1
    rsi_direction = 1
end

-- Preserve the service's MACD state weighting, except exact zero is neutral.
if macd_now > macd_signal_now and macd_histogram_now > 0 then
    score = score + 2
    macd_direction = 1
elseif macd_now < macd_signal_now and macd_histogram_now < 0 then
    score = score - 2
    macd_direction = -1
elseif macd_histogram_now > 0 then
    score = score + 1
    macd_direction = 1
elseif macd_histogram_now < 0 then
    score = score - 1
    macd_direction = -1
end

local bollinger_percent_b = 0.5
if upper_now > lower_now then
    bollinger_percent_b = (close_now - lower_now) / (upper_now - lower_now)
    if bollinger_percent_b >= 1.0 then
        score = score - 2
        bollinger_direction = -1
    elseif bollinger_percent_b >= 0.8 then
        score = score - 1
        bollinger_direction = -1
    elseif bollinger_percent_b <= 0.0 then
        score = score + 2
        bollinger_direction = 1
    elseif bollinger_percent_b <= 0.2 then
        score = score + 1
        bollinger_direction = 1
    end
end

local pattern_score = 0
if bullish_engulfing then
    pattern_score = pattern_score + 1.5
elseif bearish_engulfing then
    pattern_score = pattern_score - 1.5
end
if bullish_morning_star then
    pattern_score = pattern_score + 2.0
end
if bearish_evening_star then
    pattern_score = pattern_score - 2.0
end
if bullish_hammer then
    pattern_score = pattern_score + 1.5
end
if bullish_harami then
    pattern_score = pattern_score + 1.0
elseif bearish_harami then
    pattern_score = pattern_score - 1.0
end

score = score + pattern_score
if pattern_score > 0 then
    pattern_direction = 1
elseif pattern_score < 0 then
    pattern_direction = -1
end

-- Missing/zero chart volume is neutral so OTC/forex charts do not fail closed.
local volume_multiplier = 1.0
local volume_ratio = 1.0
if volume_now > 0 and volume_average_now > 0 then
    volume_ratio = volume_now / volume_average_now
    if volume_ratio >= 2.0 then
        volume_multiplier = 1.5
    elseif volume_ratio >= 1.5 then
        volume_multiplier = 1.25
    elseif volume_ratio <= 0.5 then
        volume_multiplier = 0.75
    end
end

local adjusted_score = score * volume_multiplier
local absolute_score = math.abs (adjusted_score)
local signal_direction = 0
if adjusted_score > 0 then
    signal_direction = 1
elseif adjusted_score < 0 then
    signal_direction = -1
end

local confirming_groups = 0
if signal_direction ~= 0 then
    if rsi_direction == signal_direction then
        confirming_groups = confirming_groups + 1
    end
    if macd_direction == signal_direction then
        confirming_groups = confirming_groups + 1
    end
    if bollinger_direction == signal_direction then
        confirming_groups = confirming_groups + 1
    end
    if pattern_direction == signal_direction then
        confirming_groups = confirming_groups + 1
    end
end

local signal_quality = 1.0
if absolute_score >= 6.0 then
    signal_quality = 5.0
elseif absolute_score >= 4.5 then
    signal_quality = 4.0
elseif absolute_score >= 3.0 then
    signal_quality = 3.0
elseif absolute_score >= 1.5 then
    signal_quality = 2.0
end

if confirming_groups >= 4 then
    signal_quality = math.min (5.0, signal_quality + 1.0)
elseif confirming_groups >= 3 then
    signal_quality = math.min (5.0, signal_quality + 0.5)
end

if volume_multiplier >= 1.25 then
    signal_quality = math.min (5.0, signal_quality + 0.5)
elseif volume_multiplier <= 0.75 then
    signal_quality = math.max (1.0, signal_quality - 0.5)
end

-- A raw quality of 3+ is equivalent to the service's radar requirement.
regular_higher_setup = conditional (
    data_is_ready and
    signal_direction == 1 and
    absolute_score >= minimum_score and
    signal_quality >= minimum_quality
)

regular_lower_setup = conditional (
    data_is_ready and
    signal_direction == -1 and
    absolute_score >= minimum_score and
    signal_quality >= minimum_quality
)

-- Confirm the previous completed candle and suppress repeated adjacent setups.
confirmed_regular_higher = conditional (
    get_value (regular_higher_setup [1], false) and
    not get_value (regular_higher_setup [2], false)
)

confirmed_regular_lower = conditional (
    get_value (regular_lower_setup [1], false) and
    not get_value (regular_lower_setup [2], false)
)

if bands_visible then
    plot (bollinger_upper, "Upper Bollinger Band", upper_band_color, band_width)
    plot (bollinger_middle, "Bollinger Middle", middle_band_color, band_width)
    plot (bollinger_lower, "Lower Bollinger Band", lower_band_color, band_width)
end

if signals_visible then
    plot_shape (
        confirmed_regular_higher,
        "Regular Signals HIGHER",
        shape_style.triangleup,
        shape_size.small,
        higher_color,
        shape_location.belowbar,
        -1,
        "HIGHER",
        signal_text_color
    )

    plot_shape (
        confirmed_regular_lower,
        "Regular Signals LOWER",
        shape_style.triangledown,
        shape_size.small,
        lower_color,
        shape_location.abovebar,
        -1,
        "LOWER",
        signal_text_color
    )
end

-- QCS advice is a platform notification state only; it does not place trades.
if advice_enabled and
    get_value (confirmed_regular_higher, false) and
    not get_value (confirmed_regular_lower, false) then
    advise (advice.buy)
elseif advice_enabled and
    get_value (confirmed_regular_lower, false) and
    not get_value (confirmed_regular_higher, false) then
    advise (advice.sell)
else
    advise (advice.neutral)
end

More momentum scripts

  • Momentum
  • Own panel
  • Beginner

Double Momentum 20 3

Marks the candle where the fast Momentum(3) line crosses zero in the direction of the slower Momentum(20) line. The slow line gives the trend side, the fast line gives the timing.

Indicators: Momentum (20) · Momentum (3)

  • Momentum
  • On price
  • Intermediate

Elder Impulse

Marks the first candle where both trend (EMA 13) and momentum (MACD histogram) turn the same way, following Alexander Elder's Impulse System colours. A marker appears only when the state changes, not on every green or red candle.

Indicators: EMA (13) · MACD histogram (12, 26, 9)

  • Momentum
  • On price
  • Beginner

EMA Momentum

Marks the candle that completes two events: price closes across the EMA(20) and the Momentum(20) line crosses zero, within a few candles of each other. Both must still be true on the marked candle.

Indicators: EMA (20) · Momentum (20)

Download all 56 scripts as one ZIP · MIT License, provided “as is”, without warranty. IQOptionWiki is independent of the IQ Option platform operator. Nothing here is investment advice or a guarantee of results.

GENERAL RISK WARNING

The financial products offered by the company carry a high level of risk and can result in the loss of all your funds. You should never invest money that you cannot afford to lose.
Kindly note that this article does not provide any investment advice. The information presented regarding past events or potential future developments is solely an opinion and cannot be guaranteed as factual, including the provided examples. We caution readers accordingly.