Merhabalar,
Telegram yolu ile ya da mail yolu ile bildirim almanız mümkündür.
Aşağıya her iki yapı için de kodlama örneği ekliyorum, lütfen inceleyiniz.
Email için:
not: Gönderilecek mail adresi kısmına kendi mail adresinizi ve şifre kısmına da şifrenizi yazınız.
using System;
using System.Collections.Generic;
using System.Linq;
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 System.Net.Mail;
using System.Net;
using Matriks.Trader.Core.TraderModels;
using System.Text;
namespace Matriks.Lean.Algotrader
{
public class EmailNotificationStrategy : 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("VET_USDT_BIN")]
public string Symbol1;
[Parameter(SymbolPeriod.Min15)]
public SymbolPeriod SymbolPeriod1;
[Parameter(3)]
public int MavilimwFirstMovPeriod1;
[Parameter(5)]
public int MavilimwSecondMovPeriod1;
[Parameter(500)]
public decimal OrderQuantity1;
[Parameter(5)]
public decimal StopLevel1;
MAVILIMW mavilimw;
public override void OnInit()
{
mavilimw = MAVILIMWIndicator(Symbol1, SymbolPeriod1, MavilimwFirstMovPeriod1, MavilimwSecondMovPeriod1);
SendOrderSequential(true, Side.Buy);
WorkWithPermanentSignal(false);
//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");
}
StringBuilder st = new StringBuilder();
StringBuilder st1 = new StringBuilder();
public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{
var zaman = DateTime.Now;
st.AppendLine("alış emri gönderildi.");
st.AppendLine("Strateji Adı : " + this.AlgoName);
st.AppendLine("Tarih/Saat : " + zaman);
st.AppendLine("SembolAdı : " + Symbol1);
st1.AppendLine("alış emri gönderildi.");
st1.AppendLine("Strateji Adı : " + this.AlgoName);
st1.AppendLine("Tarih/Saat : " + zaman);
st1.AppendLine("SembolAdı : " + Symbol1);
var barData1 = GetBarData(Symbol1, SymbolPeriod1);
if (CrossBelow(mavilimw, barData1, OHLCType.Low, 0))
{
SendMarketOrder(Symbol1, OrderQuantity1, OrderSide.Buy, includeAfterSession:false);
MailGonder(st.ToString());
}
if (CrossAbove(mavilimw, barData1, OHLCType.Low, 0))
{
SendMarketOrder(Symbol1, OrderQuantity1, OrderSide.Sell, includeAfterSession:false);
MailGonder(st1.ToString());
}
}
public void MailGonder(string icerik)
{
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
// Gönderecek mail adresi
mail.From = new MailAddress("gonderecekmailadresi@gmail.com");
// gönderilecek adres
mail.To.Add("gonderilecekmailadresi@gmail.com");
mail.Subject = "MatriksIQ ";
mail.Body += " <!DOCTYPE html> ";
mail.Body += " <html lang='tr'> ";
mail.Body += " <head> ";
mail.Body += " <title>MatriksIQ</title> ";
mail.Body += " <meta charset='utf-8'> ";
mail.Body += " <meta name='viewport' content='width=device-width, initial-scale=1'> ";
mail.Body += " </head> ";
mail.Body += " <body> ";
mail.Body += " <div style=‘width: 100%; max-width: 1140px; padding: 0 15px; margin: 0 auto;’> ";
mail.Body += " <div style=‘text-align: center;’> ";
mail.Body += " <img src=‘https://destek.matriksdata.com/assets/images/category-logo-matriks.png‘ alt=‘Matriks Data’ width=‘400’ height=‘auto’> ";
mail.Body += " </div> ";
mail.Body += " <h2 style=‘text-align: center; background-color: #539AC8; color: white; margin: 0 1px; padding: 10px 0;’>";
mail.Body += icerik;
mail.Body += " </h2> ";
mail.Body += " </div> ";
mail.Body += " </body> ";
mail.Body += " </html> ";
mail.BodyEncoding = System.Text.Encoding.GetEncoding(28599);
mail.IsBodyHtml = true;
SmtpServer.Port = 587;
// mail adresi ve şifresi
SmtpServer.Credentials = new System.Net.NetworkCredential("mailadresi@gmail.com", "mailadresisifresi");
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
}
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)
{
}
}
}
}
Telegram İçin :
not : Lütfen kendi token ve id adresinizi giriniz.
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.Net;
namespace Matriks.Lean.Algotrader
{
public class TelegramBot
{
static readonly string token = "";
static readonly string chatId = "";
public static string SendMessage(string message)
{
string retval = string.Empty;
string url = $"https://api.telegram.org/bot{token}/sendMessage?chat_id={chatId}&text={message}";
using (var webClient = new WebClient())
{
retval = webClient.DownloadString(url);
}
return retval;
}
}
public class telegram : 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("GARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod;
[Parameter(26)]
public int MacdLongPeriod1;
[Parameter(12)]
public int MacdShortPeriod1;
[Parameter(9)]
public int MacdTriggerPeriod1;
[Parameter(1)]
public decimal OrderQuantity1;
MACD macd;
/// <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()
{
AddSymbol(Symbol, SymbolPeriod);
macd = MACDIndicator(Symbol, SymbolPeriod, OHLCType.Close, MacdLongPeriod1, MacdShortPeriod1, MacdTriggerPeriod1);
//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);
WorkWithPermanentSignal(true);
}
bool result = true;
public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{
var barData1 = GetBarData(Symbol, SymbolPeriod);
var ohlcData1 = GetSelectedValueFromBarData(barData1, OHLCType.Close);
var result = macd.Value[0][macd.CurrentIndex] > macd.Value[1][macd.CurrentIndex];
if (result)
{
SendMarketOrder(Symbol, OrderQuantity1, OrderSide.Buy, includeAfterSession:false);
TelegramBot.SendMessage("Alış Emri ");
}
}
/// <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)
{
}
}
}
}
İyi çalışmalar.