
Cette stratégie est une méthode de négociation de crypto-monnaie basée sur la date du calendrier, qui consiste à acheter et à vendre des opérations en utilisant des dates spécifiques du cycle lunaire. La stratégie commence à partir du Nouvel An lunaire et se poursuit jusqu’à la fin du mois de décembre de la même année, selon une règle simple: acheter le 5e jour de chaque mois lunaire et vendre le 26e jour de chaque mois lunaire. Cette méthode tente de capturer les modèles de marché qui peuvent être liés au cycle lunaire, offrant aux traders un cadre de négociation structuré et facile à suivre.
Le principe central de cette stratégie est basé sur l’influence que le cycle lunaire peut avoir sur le marché des crypto-monnaies. Le code met en œuvre cette idée de la manière suivante:
La stratégie utilise une méthode de calcul de la date précise, en stockant le nombre de jours de chaque mois lunaire par une matrice et en calculant cumulativement le nombre total de jours à partir du nouvel an lunaire, afin de déterminer avec précision la date lunaire actuelle. Cette méthode garantit le déclenchement précis du signal de transaction.
L’analyse du code de cette stratégie permet de résumer les avantages suivants:
Malgré les avantages mentionnés ci-dessus, cette stratégie comporte des risques potentiels:
Afin de réduire ces risques, les traders peuvent envisager de confirmer des transactions en combinaison avec d’autres indicateurs techniques ou de définir un stop-loss fixe pour limiter les pertes sur une seule transaction.
L’analyse approfondie du code suggère les orientations suivantes:
Présentation d’un mécanisme de stop loss: ajouter des conditions de stop-loss en pourcentage ou en montant absolu, pour éviter des pertes importantes en compensant automatiquement les pertes lorsque les pertes atteignent un seuil spécifique. Le code d’optimisation peut ajouter des conditions similairesif strategy.position_size > 0 and close < entry_price * (1 - stop_loss_percent)Le jugement conditionnel
Confirmation des indicateurs techniques intégrés: en combinaison avec des indicateurs de tendance (comme les moyennes mobiles) ou des indicateurs de dynamique (comme le RSI, l’indice de force relative) en tant que conditions auxiliaires, effectuez des transactions sur les dates du calendrier lunaire uniquement lorsque les indicateurs techniques fournissent un signal favorable. Cela améliore la qualité du signal.
Optimiser la date d’achat et de vente: Analyser les dates du calendrier qui offrent le meilleur moment d’achat et de vente pour les combinaisons, en utilisant des données historiques, plutôt que d’utiliser les jours 5 et 26. Il est possible que certaines combinaisons de dates particulières soient plus performantes.
Gestion partielle des positionsModification de la stratégie pour négocier avec une partie de l’argent au lieu de l’argent à 100%, ou pour ajuster la taille de la position en fonction de la dynamique de la volatilité du marché afin de diversifier le risque.
Ajout d’un filtre sur l’état du marché: suspendre l’exécution de la stratégie dans des conditions de marché extrêmes (telles qu’une forte volatilité ou une tendance baissière évidente) et éviter de négocier dans des conditions défavorables.
Élargissement de la période de validité: ajouter des données du calendrier pour plus d’années, ou développer une fonction qui calcule automatiquement les dates du calendrier pour que la stratégie puisse fonctionner indéfiniment.
Augmentation des échanges de variétés: Étendre la stratégie à plusieurs crypto-monnaies ou autres catégories d’actifs, en observant les différences de performances dans les différents marchés selon le cycle lunaire.
La mise en œuvre de ces orientations d’optimisation peut considérablement améliorer la robustesse et l’adaptabilité de la stratégie, tout en conservant sa simplicité et son intuition.
Les stratégies de trading de crypto-monnaie basées sur le cycle lunaire offrent une perspective de trading unique, utilisant des opérations d’achat et de vente sur des dates de calendrier spécifiques. Le plus grand avantage de cette stratégie réside dans ses règles simples et claires et sa facilité de mise en œuvre, combinées à ce facteur unique du cycle lunaire, qui peut capturer des modèles de marché négligés par l’analyse technique classique.
Cependant, la stratégie est également confrontée à un manque de gestion des risques et d’adaptabilité au marché. Pour améliorer l’efficacité de la stratégie, il est recommandé d’introduire des améliorations telles que des mécanismes de stop-loss, la confirmation des indicateurs techniques et l’optimisation des dates d’achat et de vente. Ces optimisations peuvent non seulement réduire les risques potentiels, mais aussi renforcer l’adaptabilité de la stratégie dans différents environnements de marché.
Il convient de noter que toute stratégie de trading doit être soumise à des tests complets de rétroaction et de prospective pour vérifier sa performance dans des conditions de marché réelles. En adoptant cette stratégie, le trader doit effectuer les ajustements appropriés en fonction de sa capacité à supporter le risque et de ses objectifs d’investissement, et prendre des décisions de trading plus complètes en combinaison avec d’autres méthodes d’analyse.
/*backtest
start: 2024-08-11 00:00:00
end: 2025-08-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Lunar ETHUSDT Trading 100% Invest with Fee & Slippage (2020~2026)", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1)
// Fee and slippage settings
feePercent = 0.1 // 0.1%
slippageTicks = 3
tickSize = syminfo.mintick
slippage = slippageTicks * tickSize
// Function for lunar new year start date and monthly lengths by year
f_get_lunar_data() =>
y = year(time)
if y == 2020
[timestamp("Asia/Seoul", 2020, 1, 25, 0, 0), array.from(29,30,29,30,29,30,29,30,29,30,30,29)]
else if y == 2021
[timestamp("Asia/Seoul", 2021, 2, 12, 0, 0), array.from(30,29,30,29,30,29,30,29,30,29,30,30)]
else if y == 2022
[timestamp("Asia/Seoul", 2022, 2, 1, 0, 0), array.from(29,30,29,30,29,30,29,30,30,29,30,29)]
else if y == 2023
[timestamp("Asia/Seoul", 2023, 1, 22, 0, 0), array.from(30,29,30,29,30,29,30,30,29,30,29,30)]
else if y == 2024
[timestamp("Asia/Seoul", 2024, 2, 10, 0, 0), array.from(30,29,30,29,30,29,30,29,30,29,30,30,29)]
else if y == 2025
[timestamp("Asia/Seoul", 2025, 1, 29, 0, 0), array.from(29,30,29,30,29,30,29,30,30,29,30,29)]
else if y == 2026
[timestamp("Asia/Seoul", 2026, 2, 17, 0, 0), array.from(30,29,30,29,30,29,30,30,29,30,29,30)]
else
[na, array.new_int()]
// Function to create cumulative monthly days array
f_get_lunar_md(days_arr) =>
arr = array.new_int()
sum = 0
for i = 0 to array.size(days_arr) - 1
sum += array.get(days_arr, i)
array.push(arr, sum)
arr
// Get lunar start date and monthly lengths
[ts_start, lunar_lengths] = f_get_lunar_data()
valid = not na(ts_start)
days_since = valid ? math.floor((time - ts_start) / 86400000) : na
cumulative = valid ? f_get_lunar_md(lunar_lengths) : na
// Declare lunar month, day, last day variables
var int lunar_month = na
var int lunar_day = na
var int lunar_last_day = na
// Calculate lunar date
if valid and not na(days_since) and days_since >= 0
lunar_month := na
lunar_day := na
lunar_last_day := na
for i = 0 to array.size(cumulative) - 1
cum = array.get(cumulative, i)
prev = i == 0 ? 0 : array.get(cumulative, i - 1)
if days_since < cum
lunar_month := i + 1
lunar_day := days_since - prev + 1
lunar_last_day := array.get(lunar_lengths, i)
break
else
lunar_month := na
lunar_day := na
lunar_last_day := na
// Buy condition: Lunar day 5 and no current position
buy_condition = not na(lunar_day) and lunar_day == 5 and strategy.position_size == 0
// Sell condition: Lunar day 26 and holding position
sell_condition = not na(lunar_day) and lunar_day == 26 and strategy.position_size > 0
// Buy/sell price adjusted for slippage and fee
price_buy = close + slippage
price_buy_with_fee = price_buy * (1 + feePercent * 0.01)
price_sell = close - slippage
price_sell_with_fee = price_sell * (1 - feePercent * 0.01)
// Calculate buy quantity using 100% of equity
qty = math.floor(strategy.equity / price_buy_with_fee)
// Buy order (limit)
if buy_condition and qty > 0
strategy.entry("Lunar Buy", strategy.long, qty, limit=price_buy)
// Sell order (close all)
if sell_condition and strategy.position_size > 0
strategy.close("Lunar Buy")
// True range variable (for label position adjustment)
tr = ta.tr(true)
// Date format creation
yr = year(time)
mo = month(time)
dy = dayofmonth(time)
mo_str = mo < 10 ? "0" + str.tostring(mo) : str.tostring(mo)
dy_str = dy < 10 ? "0" + str.tostring(dy) : str.tostring(dy)
solar_str = str.tostring(yr) + "-" + mo_str + "-" + dy_str
// Display solar and lunar date and position label (on bar close)
if barstate.islastconfirmedhistory and not na(lunar_day)
label.new(bar_index, high - tr * 6, "Solar: " + solar_str + "\nLunar: " + str.tostring(lunar_month) + "-" + str.tostring(lunar_day) ,
style=label.style_label_up, size=size.normal, color=color.new(color.teal, 50), textcolor=color.white)
// Display "15" label at bottom on lunar day 15 (lowest of last 50 bars - 1 true range)
if not na(lunar_day) and lunar_day == 15
low_offset = ta.lowest(low, 50) - tr
label.new(bar_index, low_offset, "15", style=label.style_label_down, color=color.orange, textcolor=color.white, size=size.normal)