0 beğenilme 0 beğenilmeme
981 kez görüntülendi
Merhaba,

Bir stratejiyi çalıştırdıktan sonra, o strateji alım veya satım yaptığında cep telefonuna ya da mail adresime bir uyarı mesajı iletilebilir mi?

Teşekkürler,
Algoritmik Trading kategorisinde (18 puan) tarafından | 981 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

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.

(11,059 puan) tarafından
Telegram değerleri girdim. Ama bir soru daha var.
matriks prime için de telegrama mesaj gönderilebiliyor mu?
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,639 soru
8,593 cevap
4,826 yorum
19,840 kullanıcı