diff --git a/main/Decision.py b/main/Decision.py
index 328056c00f236ec7c6009b75075157bf3447962d..397d47c8cdcf3fd2457626a6e6ab73d043f2b2c6 100644
--- a/main/Decision.py
+++ b/main/Decision.py
@@ -31,6 +31,7 @@ from DBManagement.DataManagement import getHistoCandles, export_Simulation_All
 import numpy as np
 import pandas_ta as ta
 import matplotlib.pyplot as plt
+import math
 
 #Class that contains main function and parameters for decision algorithm
 class Decision:
@@ -48,6 +49,8 @@ class Decision:
         self.sim = None
         self.crossed = False
         self.buff_price_indicator = []
+        self.nbrWins = 0
+        self.nbrLoose = 0
         #Params for sma handling
         self.timePeriod = 0
         self.price_SMA = []
@@ -57,6 +60,10 @@ class Decision:
         #symbol of the simulation
         self.symbol = symbol
         self.amount = None
+        self.balanceMartingale = 0
+        self.nbrConsecutiveLoose = 0
+        self.maxLooseMartingale = None
+        self.amountMartingale = None
         self.export_result = []
         self.mas = []
         self.timeRandom = []
@@ -80,7 +87,7 @@ class Decision:
         self.timePeriod = int(sizeCandle_min*60/time_between)
         print(f"time period = {self.timePeriod}")
         self.sim.indexTicker +=1
-        
+        print("Indicateur = ",indicator)
         if indicator == "SMA":
             #Iterate on each price of a market for SMA calculation
             for i in range(1,len(sim.histo_prices)):
@@ -105,7 +112,7 @@ class Decision:
             print(f"date End = {date}")
             #add results to list of results
             self.export_result.append(sim.endSimulation(mas)) 
-        elif indicator == "random":
+        elif indicator == "random" or indicator == "randomMartingale":
             #Iterate on each price of a market for random decision
             for i in range(1,len(sim.histo_prices)):
                 self.sim.indexTicker +=1
@@ -120,7 +127,7 @@ class Decision:
                     break
                 self.pricesSim.append([price,date])
                 
-                self.calculateRandom(date,symbol,price,timeRandom)
+                self.calculateRandom(date,symbol,price,timeRandom,indicator)
                 if self.indexTickerSim >= len(sim.histo_prices)-1:
                     break
             print(f"date End = {date}")
@@ -149,7 +156,7 @@ class Decision:
         # mas = [[10,20],[5,15]]
         if indicator == "SMA":
             self.mas = [mas]
-        if indicator == "random":
+        if indicator == "random" or indicator == "randomMartingale":
             self.timeRandom = [timeRandom]
         
         markets = ["BTCUSDT"]
@@ -175,6 +182,10 @@ class Decision:
                 self.symbol = market
                 #amout is 10% of balance
                 self.amount = balance*0.1
+                if indicator == "randomMartingale":
+                    #amount = 1% of balance
+                    self.balanceMartingale = balance
+                    self.amount = balance*0.01
                 
                 if indicator == "SMA":
                     for sl in testSL:
@@ -187,7 +198,7 @@ class Decision:
                                     print("Amount = ",self.amount)
                                     print(self.sim)
                                     self.simulationGen(self.sim,market,c,indicator,mas=ma)
-                if indicator == "random":
+                if indicator == "random" or indicator == "randomMartingale":
                     for sl in testSL:
                         self.sim.sl = sl
                         for tp in testTP:
@@ -210,6 +221,8 @@ class Decision:
         self.sma = {"BTCUSDT":[],"ETHUSDT":[],"XRPUSDT":[],"BCHUSDT":[]}
         self.rsi = {}
         self.init = True
+        
+
         #Index of the ticker for the simulation
         self.indexTickerSim = 1
         self.pricesSim = []
@@ -217,6 +230,8 @@ class Decision:
         self.crossed = False
         self.buff_price_indicator = []
         #Params for sma handling
+        self.nbrWins = 0
+        self.nbrLoose = 0
         self.timePeriod = 0
         self.price_SMA = []
         self.sum_SMA1 =0
@@ -224,7 +239,11 @@ class Decision:
         self.cpt_ma = 0
         #symbol of the simulation
         self.symbol = symbol
-        self.amount = None
+        self.amount = 0
+        self.balanceMartingale = 0
+        self.nbrConsecutiveLoose = 0
+        self.maxLooseMartingale = None
+        self.amountMartingale = 0
         self.export_result = []
         self.mas = []
         self.timeRandom = []
@@ -340,26 +359,66 @@ class Decision:
         #print(self.sma)
     
     #Choose a random time to buy or sell
-    def calculateRandom(self, date, symbol, price, timeRandom):
-        if self.init:
-            self.init = False
-            self.randomAVorVA(date,price)
+    def calculateRandom(self, date, symbol, price, timeRandom,indicator):
+        if indicator == "random":
+            if self.init:
+                self.init = False
+                self.randomAVorVA(date,price,self.amount)
+                return 1
+            if not self.init:
+                # 1 tick = 10s
+                if self.sim.end_Active < self.sim.indexTicker and self.tmpRandom == 0:
+                    self.tmpRandom = 1
+                    rand = random.randint(timeRandom[0],timeRandom[1])
+                    rand = (rand*60)/10
+                    self.tickRandom = self.sim.indexTicker + rand
+                if self.sim.indexTicker == self.tickRandom:
+                    self.tmpRandom = 0
+                    self.randomAVorVA(date,price,self.amount)
+            return 1
+        elif indicator == "randomMartingale":
+            if self.init:
+                self.maxLooseMartingale = math.floor(math.log2((self.amount*100)/self.amount))
+                print(f"maxLooseMartingale = {self.maxLooseMartingale}")
+                self.amountMartingale = self.amount
+                self.init = False
+                self.randomAVorVA(date,price,self.amountMartingale)
+                return 1
+            if not self.init:
+                # 1 tick = 10s
+                if self.sim.end_Active < self.sim.indexTicker and self.tmpRandom == 0:
+                    self.tmpRandom = 1
+                    rand = random.randint(timeRandom[0],timeRandom[1])
+                    rand = (rand*60)/10
+                    self.tickRandom = self.sim.indexTicker + rand
+                if self.sim.indexTicker == self.tickRandom:
+                    self.tmpRandom = 0
+                    if len(self.sim.winsAV) + len(self.sim.winsVA) > self.nbrWins:
+                        self.nbrConsecutiveLoose = 0
+                        self.nbrWins = len(self.sim.winsAV) + len(self.sim.winsVA)
+                        self.amountMartingale = self.amount
+                        print("Mise : "+ str(self.amountMartingale))
+                        # remettre le amount de base
+                        self.randomAVorVA(date,price,self.amountMartingale)
+                    elif len(self.sim.lossAV) + len(self.sim.lossVA) > self.nbrLoose:
+                        self.nbrConsecutiveLoose += 1
+                        if self.nbrConsecutiveLoose >= 7:
+                            print("nbrConsecutiveLoose = ",self.nbrConsecutiveLoose)
+                            self.nbrLoose = len(self.sim.lossAV) + len(self.sim.lossVA)
+                            print("Mise : ", self.amountMartingale)
+                            self.randomAVorVA(date,price,self.amountMartingale)
+
+                        else:
+                            print("nbrConsecutiveLoose = ",self.nbrConsecutiveLoose)
+                            self.nbrLoose = len(self.sim.lossAV) + len(self.sim.lossVA)
+                            self.amountMartingale = self.amountMartingale*2
+                            print("Double la mise : ", self.amountMartingale)
+                            self.randomAVorVA(date,price,self.amountMartingale)
             return 1
-        if not self.init:
-            # 1 tick = 10s
-            if self.sim.end_Active < self.sim.indexTicker and self.tmpRandom == 0:
-                self.tmpRandom = 1
-                rand = random.randint(timeRandom[0],timeRandom[1])
-                rand = (rand*60)/10
-                self.tickRandom = self.sim.indexTicker + rand
-            if self.sim.indexTicker == self.tickRandom:
-                self.tmpRandom = 0
-                self.randomAVorVA(date,price)
-        return 1
 
-    def randomAVorVA(self, date,price):
+    def randomAVorVA(self, date,price,amount):
         rand = random.randint(0,1)
         if rand == 0:
-            self.sim.placeOrder(price,self.amount,date,"AV","GTC")
+            self.sim.placeOrder(price,amount,date,"AV","GTC")
         elif rand == 1:
-            self.sim.placeOrder(price,self.amount,date,"VA","GTC")
\ No newline at end of file
+            self.sim.placeOrder(price,amount,date,"VA","GTC")
\ No newline at end of file
diff --git a/main/backend.py b/main/backend.py
index 5c7a6321c4888e6a4f04044321a1b5518e52d525..7451bfba7d71783c10c421f03f5405ab2ff923b6 100644
--- a/main/backend.py
+++ b/main/backend.py
@@ -89,7 +89,7 @@ def index():
         tmpOrder = [dec.sim.winsAV, dec.sim.lossAV, dec.sim.winsVA, dec.sim.lossVA]
         if indicatorSim == "SMA":
             figJson = createFigPyplot(market,tmpOrder, mas=dec.sma[market], arraySma=dec.mas[0])
-        if indicatorSim == "random":
+        if indicatorSim == "random" or indicatorSim == "randomMartingale":
             figJson = createFigPyplot(market,tmpOrder)
         results = getResults()
     reponse = make_response(render_template('index.html', inProgress=simulationInProgress, fig=figJson, res=results, err=dictError, stickyForm=stickyForm))
@@ -143,7 +143,7 @@ def startSimulation():
             ma = [int(ma1),int(ma2)]
         except:
             return redirect(request.referrer)
-    elif indicator == "random":
+    elif indicator == "random" or indicator == "randomMartingale":
         try:
             timeMin = int(request.form.get("minimumTime"))
             timeMax = int(request.form.get("maximumTime"))
@@ -468,7 +468,7 @@ def checkGeneralInput(takeprofit, stoploss, candleSize, dateSimStart, dateSimEnd
         dictError['dateSim'] = 'is-invalid'
     else :
         dictError['dateSim'] = 'is-valid'
-    if indicator == "SMA" or indicator == "random" or indicator == "test":
+    if indicator == "SMA" or indicator == "random" or indicator == "test" or indicator == "randomMartingale":
         dictError['indicator'] = 'is-valid'
     else:
         dictError['indicator'] = 'is-invalid'
@@ -478,7 +478,7 @@ def checkGeneralInput(takeprofit, stoploss, candleSize, dateSimStart, dateSimEnd
             dictError['ma'] = 'is-invalid'
         else:
             dictError['ma'] = 'is-valid'
-    elif indicator == "random":
+    elif indicator == "random" or indicator == "randomMartingale":
         if timeMin > timeMax or timeMin < 15 or timeMax > 1440 or timeMax < timeMin or timeMin == timeMax:
             dictError['random'] = 'is-invalid'
         else:
diff --git a/main/templates/index.html b/main/templates/index.html
index e6a4506986d2a7ef37859e8cbc0b6478d9f11ef3..0ab32601775a2cfd86b6697188c2077fe79712fa 100644
--- a/main/templates/index.html
+++ b/main/templates/index.html
@@ -113,6 +113,11 @@
                                             <option value="random" selected>Aléatoire</option>
                                             {% else %}
                                             <option value="random">Aléatoire</option>
+                                            {% endif %} 
+                                            {% if stickyForm['indicatorSelect'] == 'randomMartingale' %}
+                                            <option value="randomMartingale" selected>Aléatoire martingale</option>
+                                            {% else %}
+                                            <option value="randomMartingale">Aléatoire martingale</option>
                                             {% endif %}
                                             <!-- {% if stickyForm['indicatorSelect'] == 'test' %}
                                             <option value="test" selected>test</option>
@@ -198,8 +203,46 @@
                                     </div>
 
                                 </div>
+                                
+                            </div>
+                            <div class="row" id="rowRandomMartingale" style="display: none;">
+                                <div class="col-md-6 mb-4">
+                                    <div class="form-outline">
+                                        <label class="form-label" for="minimumTime">Temps aléatoire minimum
+                                            (minute)</label>
+                                        <input type="number" class="form-control form-control-lg {{ err['random'] }}"
+                                            id="minimumTime" name="minimumTime" max="1440" min="15"
+                                            value="{{ stickyForm['minimumTime']}}" step="5">
+                                        <div class="valid-feedback">
+                                            Correct !
+                                        </div>
+                                        <div class="invalid-feedback">
+                                            Veuillez entrer un nombre entre 15 et 1440 minutes. Le temps aléatoire minimum
+                                            doit être plus petit que le maximum.
+                                        </div>
+                                    </div>
+
+                                </div>
+                                <div class="col-md-6 mb-4">
+                                    <div class="form-outline">
+                                        <label class="form-label" for="maximumTime">Temps aléatoire maximum
+                                            (minute)</label>
+                                        <input type="number" class="form-control form-control-lg {{ err['random'] }}"
+                                            id="maximumTime" name="maximumTime" max="1440" min="15"
+                                            value="{{ stickyForm['maximumTime']}}" step="5">
+                                        <div class="valid-feedback">
+                                            Correct !
+                                        </div>
+                                        <div class="invalid-feedback">
+                                            Veuillez entrer un nombre entre 15 et 1440 minutes. Le temps aléatoire minimum
+                                            doit être plus petit que le maximum.
+                                        </div>
+                                    </div>
+
+                                </div>
+                                
                             </div>
-                            <div class="row" id="rowTest" style="display: none;">
+                            <!-- <div class="row" id="rowTest" style="display: none;">
                                 <div class="col-md-6 mb-4">
                                     <div class="form-outline">
                                         <label class="form-label" for="M">Test 1</label>
@@ -216,7 +259,7 @@
                                     </div>
 
                                 </div>
-                            </div>
+                            </div> -->
                             <div class="row">
                                 <div class="col-md-6 mb-4">
                                     <a href="resetSimulation"><button type="button"
@@ -420,6 +463,7 @@
     var indicatorSelect = document.getElementById('indicatorSelect');
     var SMA = document.getElementById('rowSMA');
     var random = document.getElementById('rowRandom');
+    var randomMartingale = document.getElementById('rowRandomMartingale');
     var test = document.getElementById('rowTest');
 
     var inProgress = {{ inProgress| lower }};
@@ -468,15 +512,22 @@
         if (indicatorSelect.value === 'SMA') {
             SMA.style.display = 'flex';
             random.style.display = 'none';
-            test.style.display = 'none';
+            randomMartingale.style.display = 'none';
+            //test.style.display = 'none';
         } else if (indicatorSelect.value === 'random') {
             random.style.display = 'flex';
             SMA.style.display = 'none';
-            test.style.display = 'none';
-        } else if (indicatorSelect.value === 'test') {
+            randomMartingale.style.display = 'none';
+            //test.style.display = 'none';
+        /*} else if (indicatorSelect.value === 'test') {
             test.style.display = 'flex';
             SMA.style.display = 'none';
+            random.style.display = 'none';*/
+        } else if (indicatorSelect.value === 'randomMartingale') {
+            randomMartingale.style.display = 'flex';
+            SMA.style.display = 'none';
             random.style.display = 'none';
+            //test.style.display = 'none';
         }
     }