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