Matriks Destek ve Yardım Platformu

Matriks Ürünleri ile ilgili tüm sorularınız için bizlere buradan ulaşabilirsiniz. Daha önce sorulan soruları ve verilen cevapları ilgili sekmelerden ve arama üzerinden inceleyebilirsiniz. Sağ taraftaki kategoriler üzerinden İlgilendiğiniz özelliklerle ilgili soruları filtreleyebilirsiniz. Soru ve cevapları sosyal medyada paylaşabilirsiniz. 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.

0

Exeldeki verileri çekip algoritmaya tanımlamak ve buna göre işlem yapmak

Soruldu
Görüntülenme
1.197 görüntülenme
Durum
Cevaplandı
Selamlar,

Exelde bir formül geliştirdim. Bunu kodlamak tam bir ölüm acaba algoritma bir datayı exelle gönderip oradan çıktıyı alıp tekrar algoritmaya alıp işlem açmak mümkün mü? Mümkünse yardımcı olur musunuz.

İyi çalışmalar,
Paylaş

1 Cevap

0

Selamlar,

Excel DLLleri neye ne kadar izin veriyor bilemiyorum dll ve C# araştırmanız gerekir.

Elimizde şöyle bir örnek var belki işinizi görür Excel'de koşul sağlandığında bir txt dosyasına sembol,adet,yön,fiyat,emirtipi gibi parametrelerin olduğu bir veri yazdırılabilir.

bu veriyi stratejide 1 saniyede bir okutularak herhangi bir sinyal varsa emir gönderilebilir.

parametre yapısı:

Excel kodu:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

    Set KeyCells = Range("A1:A1")

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
               Is Nothing Then
               
            Dim filename As String, lineText As String
            Dim myrng As Range, i, j
            
            If Len(Dir("C:\IQData\TxtdekiSinyal\oku.txt")) > 0 Then
                Kill "C:\IQData\TxtdekiSinyal\oku.txt"
            End If
            
            filename = ThisWorkbook.Path & "\oku.txt"
            
            Open filename For Output As #1
            
            Set myrng = Range("A1")           ' kaydedilecek excel bölgesini seç
            
            Print #1, myrng
            
            Close #1
    End If
End Sub

strateji kodu:

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using System.Windows.Media;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.AlgoTrader;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Trader.Core.TraderModels;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
using System.IO;
using System.Text.RegularExpressions;
using System.Text;

namespace Matriks.Lean.Algotrader
{
	public class V3: MatriksAlgo
	{
		[SymbolParameter("GARAN")]
		public string Symbol;

		[Parameter(1)]
		public int TaranmaSuresi;

		[Output]
		public decimal adet;

		public string PathMain = "C:\\IQData\\TxtdekiSinyal\\";
		public string DosyaAdiOku = "oku";
		
		char Ayrac = '|';

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod.Year);

			SendOrderSequential(false);
			WorkWithPermanentSignal(true);
			SetTimerInterval(1);
		}

		public override void OnTimer()
		{
			try
			{
				var oku = DosyadanOku(PathMain, DosyaAdiOku);

				if (oku.Length>0)
				{
					var sembol = oku.Split(Ayrac)[0];
					var adet = Convert.ToDecimal(oku.Split(Ayrac)[1]);
					var yon = oku.Split(Ayrac)[2] == "1"? OrderSide.Buy:OrderSide.Sell;
					var fiyat = Convert.ToDecimal(oku.Split(Ayrac)[3]);
					var emirTipi = oku.Split(Ayrac)[4];

					if (yon == OrderSide.Buy && adet != 0)
					{
						if (emirTipi == "1")
						{
							SendMarketOrder(sembol, adet, yon, new TimeInForce(TimeInForce.ImmediateOrCancel));
							Debug("Sembol: " + sembol + " adet: " + adet + " yon: " + yon.ToString());
						}else if (emirTipi == "2")
						{
							SendLimitOrder(sembol, adet, yon, fiyat, new TimeInForce(TimeInForce.ImmediateOrCancel));
							Debug("Sembol: " + sembol + " adet: " + adet + " yon: " + yon.ToString() + " fiyat: " + fiyat);
						}

						Debug("Txt dosyasından alış sinyali geldi");

					}

					if (yon == OrderSide.Sell && adet != 0)
					{
						if (emirTipi == "1")
						{
							SendMarketOrder(sembol, adet, yon, new TimeInForce(TimeInForce.ImmediateOrCancel));
							Debug("Sembol: " + sembol + " adet: " + adet + " yon: " + yon.ToString());
						}else if (emirTipi == "2")
						{
							SendLimitOrder(sembol, adet, yon, fiyat, new TimeInForce(TimeInForce.ImmediateOrCancel));
							Debug("Sembol: " + sembol + " adet: " + adet + " yon: " + yon.ToString() + " fiyat: " + fiyat);
						}

						Debug("Txt dosyasından satış sinyali geldi");
					}

					DosyayaYaz(PathMain, DosyaAdiOku, "", false);
					Debug("Txt temizlendi.");
				}
			}catch (Exception e)
			{
				Debug(e.Message);
			}
		}

		public string DosyadanOku(string dosyayolu, string dosyaAdi)
		{
			try
			{
				if (!System.IO.Directory.Exists(dosyayolu))
					Directory.CreateDirectory(dosyayolu);

				string _fileName = Path.Combine(dosyayolu, dosyaAdi + ".txt");

				if (!File.Exists(_fileName))
					File.AppendAllText(_fileName, "");

				return File.ReadAllText(_fileName);
			}
			catch (Exception exp)
			{
				DosyayaYaz(PathMain, "DosyadanOku: ", exp.Message, true);
				return "hata";
			}
		}

		public void DosyayaYaz(string dosyayolu, string dosyaAdi, string icerik, bool eklenecekMi)
		{
			try
			{
				if (!System.IO.Directory.Exists(dosyayolu))
					Directory.CreateDirectory(dosyayolu);

				string _fileName = Path.Combine(dosyayolu, dosyaAdi + ".txt");

				if (eklenecekMi) File.AppendAllText(_fileName, icerik);
				else File.WriteAllText(_fileName, icerik);
			}
			catch (Exception)
			{
				// Hata
			}
		}
	}
}

 

Unblocked Games offering a wide range of experiences: action, puzzle, platform, racing, clicker mechanics, strategy, sports, even horror.
https://unblocked1games.github.io
BağlantıBayraklaKripexMatriks Destek16.499

Cevabınız

Cevap yazmak için giriş yapın.Giriş yapKayıt ol