Ana içeriğe geç

Martingale cBot

Stratejiye genel bakış

Martingale cBot, finans piyasalarına uyarlanmış klasik bir bahis sistemi olan Martingale stratejisini uygulayan bir işlem robotudur. 18. yüzyılda Fransız matematikçiler tarafından keşfedilen Martingale stratejisi, kumarhanelerdeki bahisçiler arasında hızla popüler hale geldi.

Örnek

Martingale stratejisinin mekaniğini anlamak için, 1 USD'lik bir bahisle başlayan tura veya yazı oyununda bir madeni paranın atıldığı bir senaryoyu düşünün.

Madeni paranın tura veya yazı gelme olasılığı %50'dir. Her madeni para atışı bağımsızdır; bir atışın sonucu bir sonrakini etkilemez.

Her kayıptan sonra bahis ikiye katlanırsa, nihai bir kazanç tüm kayıpları telafi edecek ve ayrıca 1 USD kâr sağlayacaktır.

cBot oluşturma

C# veya Python kullanarak cBot oluşturmayı adım adım kılavuzlarımızda öğrenin.

Martingale cBot kodu, herkese açık C# ve Python depolarımızda mevcuttur. Aynı kod, cTrader Windows veya Mac'teki algoritma oluşturma sihirbazında bir şablon olarak sağlanır veya aşağıdaki kod parçasını kopyalayıp kullanabilirsiniz:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using cAlgo.API;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class SampleMartingalecBot : Robot
    {
        [Parameter("Initial Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double InitialQuantity { get; set; }

        [Parameter("Stop Loss", Group = "Protection", DefaultValue = 40)]
        public int StopLoss { get; set; }

        [Parameter("Take Profit", Group = "Protection", DefaultValue = 40)]
        public int TakeProfit { get; set; }


        private Random random = new Random();

        protected override void OnStart()
        {
            Positions.Closed += OnPositionsClosed;

            ExecuteOrder(InitialQuantity, GetRandomTradeType());
        }

        private void ExecuteOrder(double quantity, TradeType tradeType)
        {
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(quantity);
            var result = ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "Martingale", StopLoss, TakeProfit);

            if (result.Error == ErrorCode.NoMoney)
                Stop();
        }

        private void OnPositionsClosed(PositionClosedEventArgs args)
        {
            Print("Closed");
            var position = args.Position;

            if (position.Label != "Martingale" || position.SymbolName != SymbolName)
                return;

            if (position.GrossProfit > 0)
            {
                ExecuteOrder(InitialQuantity, GetRandomTradeType());
            }
            else
            {
                ExecuteOrder(position.Quantity * 2, position.TradeType);
            }
        }

        private TradeType GetRandomTradeType()
        {
            return random.Next(2) == 0 ? TradeType.Buy : TradeType.Sell;
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import clr

clr.AddReference("cAlgo.API")

from cAlgo.API import *

from robot_wrapper import *

import random

class SampleMartingalecBot():
    def on_start(self):
        api.Positions.Closed += self.on_position_closed
        self.execute_order(api.InitialQuantity, self.get_random_trade_type())

    def execute_order(self, quantity, tradeType):
        volumeInUnits = api.Symbol.QuantityToVolumeInUnits(quantity)
        result = api.ExecuteMarketOrder(tradeType, api.SymbolName, volumeInUnits, "Martingale",  api.StopLoss,  api.TakeProfit)
        if result.Error == ErrorCode.NoMoney:
            api.Stop()

    def on_position_closed(self, args):
        api.Print("Closed")

        position = args.Position
        if position.Label != "Martingale" or position.SymbolName != api.SymbolName:
            return
        if position.GrossProfit > 0:
            self.execute_order(api.InitialQuantity, self.get_random_trade_type())
        else:
            self.execute_order(position.Quantity * 2, position.TradeType)

    def get_random_trade_type(self):
        return TradeType.Buy if random.randint(0, 1) == 0 else TradeType.Sell

Indicator entegrasyonu

Martingale cBot, piyasanın yönünü tahmin etmek için herhangi bir tahmin modeli veya teknik gösterge kullanmaz. Bunun yerine, alım ve satım kararları için rastgele bir şansa güvenir ve her işlem için öngörülemeyen sonuçlar (kâr veya zarar) doğurur.

Mantık

Rastgele işlem yönü

  • cBot, GetRandomTradeType() yöntemi aracılığıyla rastgele bir alış veya satış emri verip vermeyeceğini seçer.

  • ExecuteOrder()` yöntemi, parametrelerde tanımlanan miktar, zarar durdur ve kâr al ile bir piyasa emri verir.

Martingale mekanizması

  • cBot, bir pozisyonun ne zaman kapatıldığını OnPositionsClosed() olay işleyicisi aracılığıyla algılar.
  • Kapatılan pozisyon kârla sonuçlanırsa, cBot kendini sıfırlar ve başlangıç lot büyüklüğü ve rastgele bir işlem yönüyle yeni bir işlem açar.
  • Kapatılan pozisyon zararla sonuçlanırsa, cBot bir sonraki işlemin miktarını iki katına çıkarır ancak önceki işlemle aynı işlem yönünü (alış veya satış) korur.

Risk yönetimi

  • cBot, her kaybedilen işlemden sonra pozisyon büyüklüğünü iki katına çıkararak kayıpları telafi etmek ve başarılı bir işlem gerçekleştiğinde kâr elde etmek için Martingale stratejisine güvenir.
  • Varsayılan zarar durdur ve kâr al değerleri, her işlemdeki riski ve getiriyi dengelemeyi amaçlar.

Yürütme ve sonlandırma

cBot, yetersiz fonlar (NoMoney) nedeniyle bir hatayla karşılaşırsa, işlem yapmaya çalışmayı durdurur.

Parametreler

Parametre Birim Tanım İpuçları
Adet Lot Her Martingale döngüsündeki (ilk) işlemin hacmi. Yüksek bir değer belirlemek, ilk işlem için pozisyon büyüklüğünü artırır. Sonuç olarak, başarılı bir işlem döngüsünün sonunda kâr büyük olacaktır. Ancak, kaybedilen bir işlem durumunda, bir sonraki işlem büyüklüğü iki katına çıkacak ve bu da riski katlanarak artıracaktır.

Düşük bir değer belirlemek, ilk işlem için pozisyon büyüklüğünü azaltır. Sonuç olarak, başarılı bir işlem döngüsünün sonunda kâr küçük olacak, ancak uzun süreli bir kayıp serisinde risk minimize edilecektir.
Zarar durdur Pip Giriş fiyatından, kaybedilen bir işlemin otomatik olarak kapatılacağı mesafe. Büyük bir zarar durdur, piyasanın işlemi kapatmadan önce işleme karşı daha fazla hareket etmesine olanak tanır. Bu, geçici dalgalanmalar sırasında işlemlerin erken kapanmasını önleyebilir, ancak piyasa yanlış yönde devam ederse hesabınızı daha büyük kayıplara maruz bırakır.

Küçük bir zarar durdur, kaybedilen işlemleri daha erken kapatarak işlem başına potansiyel kaybı azaltır. Ancak, kısa vadeli oynaklık nedeniyle çok erken otomatik kapatılma riskini de artırarak Martingale katlama döngüsünü daha sık tetikler.
Kâr al Pip Giriş fiyatından, belirli bir kâr seviyesine ulaşıldığında bir işlemin kapatılacağı mesafe. Yüksek bir kâr al değeri belirlemek, piyasa lehinize önemli ölçüde hareket ettiğinde büyük kârlar elde etmenizi sağlar. Ancak bu, işlemlerin kapanmasının daha uzun sürebileceği veya kâr hedefine ulaşmadan önce tersine dönebileceği anlamına da gelir ve bu da kaçırılan fırsatlara yol açabilir.

Daha küçük bir kâr al seviyesi, daha hızlı işlem kapanışlarına yol açarak daha küçük ama daha sık kârlar sağlar. Bu yaklaşım, kârlı fırsatları kaçırma olasılığını azaltabilir ancak her işlemin yukarı yönlü potansiyelini sınırlar.

Uygulama

Bant aralığında işlem gören veya yatay piyasalar

Martingale cBot, belirgin bir yükseliş veya düşüş trendinin olmadığı, yatay hareket eden piyasalarda üstün performans gösterir. Aralık bazlı piyasalarda, fiyatlar destek ve direnç seviyeleri arasında dalgalanır, bu da cBot'un kaybedilen işlemlerden sonra kayıpları hızla telafi etmesini olası kılar.

Kullanım durumu

EURUSD'nin birkaç gün boyunca 1.1000 ila 1.1050 gibi dar bir aralıkta işlem gördüğü bir senaryoyu düşünün. Martingale cBot, fiyatın bu seviyeler arasında sıçramasından faydalanabilir ve piyasa küçük geri çekilmelerden sonra tersine döndüğünde sonunda kâr elde edebilir.

En iyi uygulama

cBot'u, piyasanın öngörülebilir şekilde dalgalandığı, net ve iyi tanımlanmış fiyat hareketlerine sahip sembollerde kullanın. Sakin işlem saatlerindeki önde gelen forex çiftleri iyi bir örnektir.

Düşük volatiliteye sahip piyasalar

cBot, fiyat hareketlerinin ardışık zarar durdur seviyelerini tetikleme olasılığının daha düşük olduğu, hızlı pozisyon büyümesini önleyen düşük volatilite koşullarında kullanılabilir. Bu tür koşullar, Martingale stratejisinin kademeli fiyat geri dönüşleri yoluyla iyi performans göstermesini sağlar.

Kullanım durumu

Düşük haber döneminde altın (XAUUSD) gibi bir emtiada işlem yapıyorsanız, fiyat dar bir aralıkta kalabilir. cBot, fiyatların kısa fiyat hareketleri içinde geri dönme olasılığının daha yüksek olması nedeniyle bu ortamdan faydalanabilir, bu da büyük düşüş riskini azaltarak kârlı işlemler yapılmasına olanak tanır.

En iyi uygulama

Önemli ekonomik olayların veya haber bültenlerinin beklendiği dönemlerde cBot'u çalıştırmaktan kaçının, çünkü bunlar yüksek volatiliteye neden olur.

Ortalamaya dönen varlıklar

Sık sık ortalama fiyat seviyesine dönen semboller, uzun vadeli bir trend oluşturmadan önce genellikle geri dönüşler yaşadıkları için Martingale cBot için çok uygundur. Bu tür koşullarda, cBot daha hızlı toparlanabilir ve kayıplardan sonra pozisyon büyüklüklerini artırarak kazanç elde edebilir.

Kullanım durumu

EURGBP gibi ortalamaya dönen para birimlerinde işlem yapmayı düşünün. Bu tür semboller, geçici yükseliş veya düşüşlerden sonra genellikle ortalama fiyatlarına geri dönerler, bu da cBot'un fiyat geri dönüşünden sonra kaybedilen pozisyonları kârla kapatması için ideal koşullar ve fırsatlar sağlar.

En iyi uygulama

Fiyatların uzun bir süre tek yönde hareket etmeye devam edebileceği güçlü, uzun süreli trend piyasalarda cBot'u kullanmaktan kaçının. Bu tür piyasalarda toparlanmalardan önce büyük kayıp riski daha yüksektir.

Özet

Martingale cBot, popüler Martingale stratejisini uygulayan otomatik bir işlem algoritmasıdır. Bu cBot, alış ve satış kararlarını tamamen rastgele şansa dayandırır, tahmin modellerini veya teknik göstergeleri göz ardı eder, bu da her işlem için belirsiz sonuçlara yol açar.

Piyasaların sonunda trader'ı destekleyeceği varsayımıyla hareket eden Martingale cBot, kayıplardan sonra işlem büyüklüğünü ikiye katlayarak tek bir kârlı işlemle bunları telafi eder. Bu cBot, belirli piyasalarda etkili olabilir, özellikle kullanıcılar riskler hakkında iyi bilgilendirilmişse ve uzun süreli düşüşlere dayanabilecek yeterli kaynaklara sahiplerse.