0 beğenilme 0 beğenilmeme
483 kez görüntülendi
Algoritma Sihirbazı ile X30YVADE koduyla vadeli işlem yapmak istedim ama Emir kısmında Alış, Satış var. Açığa sat vs yok..!! Bende normal Alış - Satış kodu oluşturdum. Oluşturduğum kod aşağıda, bunu vadeliye nasıl çevireceğiz..? Ayrıca sihirbazda Emir tipinde neden Açığa sat tipini göremedim..

Ayrıca; Bir sorum daha var..

X30YVADE ile vadelide al sat robotu çalışır mı.. İllaki F_xxxxx şeklinde olan kodları mı seçmek lazım. Ve miktarı 1 adet alış, 1 adet  satış seçtiğimizde Al dan sonra Sat gerçekleşince miktar 0 (sıfır) olmaz mı? Kendi 2 adet falan mı satış yapıyor arka planda...

Teşekkürler..!!

 

using System;

using System.Collections.Generic;

using System.Linq;

using Matriks;

using 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 Matriks.Lean.Algotrader.Trading;

using Matriks.AI;

using Matriks.AI.AiParameters;

using Matriks.AI.Data;

using Matriks.Trader.Core.TraderModels;

 

namespace Matriks.Lean.Algotrader

{

public class Deneme_Vadeli : 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("F_XU0301023")]

public string Symbol1;

 

 

[Parameter(SymbolPeriod.Min)]

public SymbolPeriod SymbolPeriod1;

 

 

 

[Parameter(2)]

public int MostPeriod1;

 

[Parameter(0.75)]

public decimal MostPercentage1;

 

[Parameter(MovMethod.VAR)]

public MovMethod MostMovMethod1;

 

[Parameter(3)]

public decimal OrderQuantity1;

 

[Parameter(3)]

public decimal OrderQuantity2;

 

MOST most;

 

 

 

public override void OnInit()

{

 

most = MOSTIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MostPeriod1, MostPercentage1, MostMovMethod1);

 

 

SendOrderSequential(true, Side.Buy);

WorkWithPermanentSignal(true);

 

//Alttaki fonksiyon açıldıktan sonra parametre olarak verilen saniyede bir OnTimer fonksiyonu tetiklenir.

// SetTimerInterval(3600);

 

//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 OnInitCompleted()

{

 

}

 

/// <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)

{

if (CrossAbove(most, most, 0, 1))

{

SendMarketOrder(Symbol1, OrderQuantity1, OrderSide.Buy, includeAfterSession:false);

}

if (CrossBelow(most, most, 0, 1))

{

SendMarketOrder(Symbol1, OrderQuantity2, OrderSide.Sell, includeAfterSession:false);

}

 

}

 

/// <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)

{

}

 

/// <summary>

/// Strateji durdurulduğunda bu fonksiyon tetiklenir.

/// </summary>

public override void OnStopped()

{

}

}

}
Algoritmik Trading kategorisinde (47 puan) tarafından | 483 kez görüntülendi

2 Cevaplar

1 beğenilme 0 beğenilmeme
Merhaba sizin için örnek bir kod yapısı hazırladım.

Mutlaka Matriks Deneme Ortamında test ediniz.

Gerçek hesapta ufak miktarlarla test ediniz.

Doğru çalıştığına emin olmadan kullanmayınız.

iqdestek@matriksdata.com adresine mail yoluyla da olası sorularınızı bize danışabilirsiniz.

using System;

using System.Collections.Generic;

using System.Linq;

using Matriks;

using 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 Matriks.Lean.Algotrader.Trading;

using Matriks.AI;

using Matriks.AI.AiParameters;

using Matriks.AI.Data;

using Matriks.Trader.Core.TraderModels;

 

/*

 

Bu şablon AcigaSatisYapilsin seçeneği aktif olduğunda Viop ve Binance Future piyasaları için uygun olur.

AcigaSatisYapilsin seçeneği pasif olduğunda istenilen piyasada işlem yapacaktır.

 

Stratejinin çift yönlü ilerlemesi istendiğinde AcigaSatisYapilsin seçeneğinin aktif edilmesi gerekir ( varsayılan aktif )

 

Akşam seansında da oluşan sinyallere emir gönderilmesi için AksamSeansiniDahilEt seçeneğinin aktif edilmesi gerekir ( varsayılan pasif )

Kripto piyasası 7/24 açık olduğu için bu seçeneğin aktif ya da pasif seçilmesi birşey değiştirmez.

 

HangiIslemleBaslasin değişkeni ile stratejinin ilk Long ya da Short pozisyon ile başlaması sağlanabilir.

 

*** Stratejiye eklenen sentetik emirler tetiklendiğinde pozisyon sıfırlanıp ilk gelecek sinyale göre işleme girecektir.

 

*/

 

namespace Matriks.Lean.Algotrader

{

public class VIOP2KOSUL : 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("X30YVADE")]

public string Symbol1;

 

 

[Parameter(SymbolPeriod.Min5)]

public SymbolPeriod SymbolPeriod1;

 

[Parameter(3)]

public int MostPeriod1;

 

[Parameter(2)]

public decimal MostPercentage1;

 

[Parameter(MovMethod.E)]

public MovMethod MostMovMethod1;

 

//_____________BURAYI KOPYALA________________//

 

[Parameter(5)]

public decimal BuyOrderQuantity;

 

[Parameter(5)]

public decimal SellOrderQuantity;

 

//_____________BURAYI KOPYALA________________//

 

MOST most;

 

 

 

public override void OnInit()

{

 

most = MOSTIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MostPeriod1, MostPercentage1, MostMovMethod1);

 

//_____________BURAYI KOPYALA________________//

 

// Gerekli başla - Açığa satış

WorkWithPermanentSignal(true);

SendOrderSequential(true, HangiIslemleBaslasin);

SendOrderSequentialForShort(true, Side.All);

// #Gerekli bitti - Açığa satış

 

//_____________BURAYI KOPYALA________________//

 

//Alttaki fonksiyon açıldıktan sonra parametre olarak verilen saniyede bir OnTimer fonksiyonu tetiklenir.

// SetTimerInterval(3600);

 

//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 OnInitCompleted()

{

 

}

 

/// <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)

{

if (CrossAbove(most, most, 1, 0))

{

//_____________BURAYI KOPYALA________________//

 

// Gerekli başla - Açığa satış

FX_Alis(Symbol1, BuyOrderQuantity);

// #Gerekli bitti - Açığa satış

 

//_____________BURAYI KOPYALA________________//

}

if (CrossBelow(most, most, 1, 0))

{

//_____________BURAYI KOPYALA________________//

 

// Gerekli başla - Açığa satış

FX_Satis(Symbol1, SellOrderQuantity);

// #Gerekli bitti - Açığa satış

 

//_____________BURAYI KOPYALA________________//

}

 

}

 

//_____________BURAYI KOPYALA________________//

 

// Gerekli başla - Açığa satış

[Parameter(true)]

public bool AcigaSatisYapilsin;

 

[Parameter(false)]

public bool AksamSeansiniDahilEt;

 

[Parameter(Side.All)]

public Side HangiIslemleBaslasin;

 

public bool FX_Alis(string sembol, decimal quantity)

{

bool sonuc = false;

if (LastOrderSide.Obj != Side.Buy)

{

var _quantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin) ? quantity:(LastOrderSideForShort.Obj == Side.All) ? quantity:quantity * 2;

 

SendMarketOrder(sembol, _quantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);

Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");

LastOrderSideForShort = LastOrderSide;

sentetikEmirdenMI = false;

sonuc = true;

}

return sonuc;

}

 

public bool FX_Satis(string sembol, decimal quantity)

{

bool sonuc = false;

if (LastOrderSide.Obj != Side.Sell)

{

var _quantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin) ? quantity:(LastOrderSideForShort.Obj == Side.All) ? quantity:quantity * 2;

 

SendMarketOrder(sembol, _quantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);

Debug("Satış emri gönderildi.[ " + _quantity + " adet ]");

LastOrderSideForShort = LastOrderSide;

sentetikEmirdenMI = false;

sonuc = true;

}

return sonuc;

}

 

bool sentetikEmirdenMI = false;

 

public override void OnSyntheticOrderTriggered(SyntheticAlgoOrder sOrder)

{

if (sOrder.EnableOrderSending)

{

if (AcigaSatisYapilsin)

{

LastOrderSide.Obj = Side.All;

sentetikEmirdenMI = true;

}

 

Debug("Sentetik emir tetiklendi");

}

}

// #Gerekli bitti - Açığa satış

 

//_____________BURAYI KOPYALA________________//

 

/// <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)

{

}

 

/// <summary>

/// Strateji durdurulduğunda bu fonksiyon tetiklenir.

/// </summary>

public override void OnStopped()

{

}

}

}
(520 puan) tarafından
1 beğenilme 0 beğenilmeme
Merhaba

Eğer emir kısmında kullanacağınız sembolü vadeli sembolü girmişseniz vadeliye çevirme gibi bir sorun yoktur direkt olarak al yada sat şeklinde kullanabilirsiniz, F_XU030VADE Gibisinden kod kullanıp her vade bitiminde tekrar parametre yazmak ile uğraşmak yerine FXU030N1 Yazabilirsiniz bu sayede algoritma emirleri bir sonraki en yakın vadeye gönderecektir. isterseniz araştırabilirsiniz ama mevcutta bunu buldum. sihirbazda açığa satış olmamasının nedeni vadeli olduğu için olabilir.
(223 puan) tarafından
Hoş geldiniz, Matriks Destek Platformu sizlere sorularınızın hızlıca cevaplanması için bir ortam sağlar. Sorduğunuz ve cevapladığınız soruların ve yorumlarınızın aldığı oylar üzerinden puan kazanırsınız. Puan sistemine bağlı kampanyamızla ücretsiz kullanım avantajlarından faydalanabilirsiniz.



8,636 soru
8,590 cevap
4,821 yorum
19,782 kullanıcı