0 beğenilme 0 beğenilmeme
528 kez görüntülendi
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,
Algoritmik Trading kategorisinde (326 puan) tarafından | 528 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

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
			}
		}
	}
}

 

(15,422 puan) tarafından
Excelde Veri Çekip Formül Yazmak
7,519 soru
7,522 cevap
4,408 yorum
8,776 kullanıcı