0 beğenilme 0 beğenilmeme
868 kez görüntülendi
selam.

 

aynı kağıtta, aynı periyodda, aynı opt ayarları ile çalıştırdığım sistem tester sonuçlarında neden fark var ?

PGSUS 01.07.2020 başlangıçtan son bara kadar çalıştırıyorum ikisinde de

opt ayarları aynı, her ikisinde SADECE AL/SAT işlemi ayarlanmış durumda ama sonuçlar farklı.

 

Nerede yanlış yapıyorum sizce ?
Algoritmik Trading kategorisinde (24 puan) tarafından | 868 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme
Merhaba. Lütfen AL-SAT yerlerini kontrol ediniz. Kısmen yapacağınız bir kontrol fikir verecektir. Aynı olması gerekir. Değil ise, e posta üzerinden yazışalım, kodu / kodları incelememiz gerekir.  

Getiri oranları fark edebilir. Bu IQ daki yapı farklılığından kaynaklanır. Orada bakiye ve alım satım miktarları birbirinden bağımsız olabilmektedir. Ayrıca, son emrin pozsiyonda kalmak olup olmamasına göre de değişiklik olabilir. Kodu, tüm bakiyeyi kullan şeklinde düzenlerseniz sonuçlar daha çok benzeşecektir.

Örnek bir kod aşağıdadır. Kodun adını içinde tanımlanan ad olarak koyunuz ya da, tanımı değiştiriniz.

İyi çalışmalar dileriz.

 

using System;
using System.Collections.Generic;
using System.Linq;
using http://Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using http://Matriks.Lean.Algotrader.Trading;

namespace Matriks.Lean.Algotrader
{
public class BakiyeyeGoreAlSat : MatriksAlgo
{
// Strateji çalıştırılırken kullanacağımız parametreler. Eğer sembolle ilgili bir parametre ise,
// "SymbolParameter" ile, değilse "Parameter" ile tanımlama yaparız. Parantez içindeki değerler default değerleridir.

[SymbolParameter("XRP_USDT_BIN")]
public string Symbol;

[Parameter(SymbolPeriod.Min)]
public SymbolPeriod SymbolPeriod;

// Bakiye
[Parameter(1000)]
public decimal Balance;

// Toplam tutar
public decimal Amount;

// Al sat adedi
public decimal Quantity;

[Parameter(31)]
public int Period;

[Parameter(1.82)]
public decimal Percentage;

[Parameter(24)]
public int Period1;

[Parameter(0.45)]
public decimal Percentage1;

[Parameter(18)]
public int Period2;

[Parameter(0.65)]
public decimal Percentage2;

// indikator tanımları.
MOV mov, mov1, mov2;

MOST most, most1, most2;

/// <summary>
/// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,
/// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır.
/// </summary>
public override void OnInit()
{

//Symbol = "XRP_USDT_BIN";
//SymbolPeriod = SymbolPeriod.Min5;
//BuyOrderCount = 5;
//SellOrderCount = 5;
AddSymbol(Symbol, SymbolPeriod);
mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, MovMethod.Variable);
most = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, Percentage, MovMethod.Variable);

mov1 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period1, MovMethod.Variable);
most1 = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period1, Percentage1, MovMethod.Variable);

mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period2, MovMethod.Variable);
most2 = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period2, Percentage2, MovMethod.Variable);

// Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını
//belirliyoruz. true değer, algoritmanın sadece yeni bar açılışlarında
//çalışmasını sağlar, bu fonksiyonu çağırmazsak veya false olarak
//belirlersek her işlem olduğunda algoritma
//tetiklenecektir.

WorkWithPermanentSignal(true);

//Eger backtestte emri bir al bir sat seklinde gonderilmesi isteniyor bu
//true set edilir.
//Alttaki satırı silerek veya false geçerek emirlerin sirayla
//gönderilmesini engelleyebilirsiniz.

SendOrderSequential(true);

//Alttaki fonksiyon açıldıktan sonra parametre olarak verilen saniyede bir OnTimer fonksiyonu tetiklenir.
//SetTimerInterval(60);

//Alttaki fonksiyon ile tanımlanan sembol ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.
//AddNewsSymbol(Symbol);

//Alttaki fonksiyon ile tanımlanan anahtar kelime ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.
//AddNewsKeyword("KAP");
}

/// <summary>
/// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir
/// </summary>
public override void OnInitComplated()
{

}

/// <summary>
/// SetTimerInterval fonksiyonu ile belirtilen sürede bir bu fonksiyon tetiklenir.
/// </summary>
public override void OnTimer()
{

}

/// <summary>
/// AddNewsSymbol ve AddNewsKeyword ile haberlere kayit olunmuşsa bu fonksiyon tetiklenir.
/// </summary>
/// <param name="newsId">Gelen haberin id'si</param>
/// <param name="relatedSymbols">Gelen haberin ilişkili sembolleri</param>
public override void OnNewsReceived(int newsId, List<string> relatedSymbols)
{

}

/// <summary>
/// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir.
/// </summary>
/// <param name="barData">Bardata ve hesaplanan gerçekleşen işleme ait detaylar</param>
public override void OnDataUpdate(BarDataEventArgs barData)
{
// Son fiyat
var Close=barData.BarData.Close;

if (mov>most)
{
if (CrossAbove(mov1, most1) || CrossAbove(mov2, most2))
{
// alabileceği adet
Quantity=Balance/Close;

// toplam tutar
Amount=Quantity*Close;

SendMarketOrder(Symbol, Quantity, (http://OrderSide.Buy));
Debug(Quantity+". Adet Alış Emri Gönderildi");

// güncel bakiye
Balance-=Amount;
}
}

if (mov>most)
{
if (CrossBelow(mov1, most1) || CrossBelow(mov2, most2))
{
// toplam tutar
Amount=Quantity*Close;

SendMarketOrder(Symbol, Quantity, (OrderSide.Sell));
Debug(Quantity+". Adet Satış Emri Gönderildi");

// güncel bakiye
Balance+=Amount;
}
}
}

/// <summary>
/// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir.
/// </summary>
/// <param name="barData">Emrin son durumu</param>
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{

}
}
}
}
(12,790 puan) tarafından
0 0
Bence bir yerde yanlışlık oluyor.

 

zane kod kısmını aç deyince hangi kağıdı seçersem seçeyim hep GARAN var kodun içinde.

 

şurda yani.

[SymbolParameter("GARAN")]
0 0
Merhaba. Gönderdiğim örnek bir kod idi. Oradan bakiyenin tamamını kullanma kısmını test ettiğiniz koda adapte etmek istersiniz diye gönderdim. Hangi kodu test ediyorsunuz? Bakalım. Bakiyenin tümünü kullan şeklinde dönüştürelim. NOT: AL-SAT yerlerini kontrol ettiniz mi. İyi çalışmalar.
7,516 soru
7,519 cevap
4,405 yorum
8,752 kullanıcı