2012.09.30. 12:20
Print Screen generator
Felmerülhet az igény, hogy szeretnék rögzíteni az aktuális chart tartalmát , és ezeket archiválva összegyűjtögetni valahol a számítógépen , esetleg egy sikeres üzletkötés adatait szeretnénk menteni későbbi elemzések érdekében. Sorozat második tagja ként egy erre a célra létrehozott indikátorban futó program megírását fogom leírni lépésről-lépésre.
Szükségünk lesz egy könnyen elérhető gombra , amit ha a charton megnyomunk a kép automatikus mentésre kerül.
A print screen készítésére a következő voidot fogjuk használni:
#region kepolvasas
void kep(string kep)
{
Form currentForm = Form.ActiveForm;
Graphics graph = null;
try
{
try { Bitmap bmp = new Bitmap(currentForm.Width, currentForm.Height);
graph = Graphics.FromImage(bmp); // bmp-ben ment graph.CopyFromScreen(currentForm.Bounds.Location.X, currentForm.Bounds.Location.Y, 0, 0, bmp.Size);
bmp.Save(kep);
}
catch{;}
}finally
{
}
}
#endregion
A void működése egyszerű , beolvas egy string típusú változót (ami később a file neve lesz ) , leméri az éppen aktív ablak méretét (jelen esetben a chartunkat) és lementi a megfelelő helyre bmp formátumban.
a void meghívása a következő:
screenshot(@"C:\Users\szilagyid\Documents\NinjaTrader 7\bin\Custom\x.bmp");
Ezek után csak egy gombot kell elhelyeznünk a charton , ami automatikusan meghívja majd a print screen készítőnket.
Definiáljunk hát változót a gombunknak a variable regionben.:
private ToolStrip toolStrip;
private ToolStripButton screenshot;
Ezeket a változókat meghívjuk az OnStartUp() eseményben , és állítsuk be a paramétereit is:
protected override void OnStartUp()
{
Control[] tsr = ChartControl.Controls.Find("tsrTool", false);
if(tsr != null)
{
toolStrip = (ToolStrip) tsr[0];
if(toolStrip != null)
{
screenshot = new ToolStripButton("screenshot");
screenshot.ForeColor = Color.Gainsboro;
screenshot.BackColor= Color.Green;
screenshot.Text = "screenshot";
screenshot.Click += screenshot_Click;
toolStrip.Items.Add(screenshot);
}
}
}
Mint fent láthatjuk a gomb lenyomásakor: a screenshot_click esemény fog lefutni. : ez a void fogja meghívni a screenshot utasításunkat. így:
public void screenshot_Click(object sender, EventArgs e)
{
kep(@"d:\Documents and Settings\xyz\Dokumentumok\NinjaTrader 7\tmp\x.bmp");
}
Elkerülendő továbbá, hogy a program minden frissítéskor egy új gombot helyezzen a chartra , úgyhogy az on termination eseményben érdemes törölnünk a meglévő gombjainkat. így :
protected override void OnTermination()
{
toolStrip.Items.Remove(screenshot);
screenshot = null;
base.OnTermination(); }
Az output kb. így fog kinézni:
A teljes kód:
#region Variables
int myInput0;
private ToolStrip toolStrip;
private ToolStripButton screenshot;
#endregion
protected override void Initialize()
{
Add(new Plot(Color.FromKnownColor(KnownColor.Orange), PlotStyle.Line, "Plot0"));
Overlay = true;
}
protected override void OnStartUp()
{
Control[] tsr = ChartControl.Controls.Find("tsrTool", false);
if(tsr != null)
{
toolStrip = (ToolStrip) tsr[0];
if(toolStrip != null)
{
//tweettextbox.Size.Height = Size.Height(10);
//tweettextbox.Size.Width = Size.Width(150);
screenshot = new ToolStripButton("screenshot");
screenshot.ForeColor = Color.Gainsboro;
screenshot.BackColor= Color.Green;
screenshot.Text = "screenshot";
screenshot.Click += screenshot_Click;
toolStrip.Items.Add(screenshot);
}
}
}
protected override void OnTermination()
{
toolStrip.Items.Remove(screenshot);
screenshot = null;
base.OnTermination();
}
/// <summary>
/// Called on each bar update event (incoming tick)
/// </summary>
protected override void OnBarUpdate()
{
//if (Historical != true){ScreenShot();}
// Plot0.Set(Close[0]);
}
public void screenshot_Click(object sender, EventArgs e)
{
kep(@"d:\Documents and Settings\daszilagyi\Dokumentumok\NinjaTrader 7\tmp\x.bmp");
}
#region kepolvasas
void kep(string kep)
{
Form currentForm = Form.ActiveForm;
Graphics graph = null;
try
{
try { Bitmap bmp = new Bitmap(currentForm.Width, currentForm.Height);
graph = Graphics.FromImage(bmp); // bmp-ben ment
graph.CopyFromScreen(currentForm.Bounds.Location.X, currentForm.Bounds.Location.Y, 0, 0, bmp.Size);
bmp.Save(kep);
}
catch{;}
}finally
{
}
}
#endregion
Az indikátor egy verzióját le le lehet tölteni itt
2012.09.17. 21:50
Hang értesítés Indikátorban
A sorozat első tagjaként kezdetnek egy egyszerű programot mutatok be, ami segítségünkre lehet , ha értesülni szeretnénk különböző történésekről a Ninja Traderünkben.
Bizonyára többször történt olyan , hogy pl.: indikátorok adtak számunkra jelzést , segítettek döntéseket hozni kötésekkel kapcsolatban , és erről szerettünk volna valamiféle alertet, hangüzenetet kapni.
Erre segítségünkre lehet a System.Speech.dll mellyel tetszőleges üzenetet mondathatunk ki indikátorunkkal , vagy stratégiánkkal.
A Windows keresőjébe írjuk be hogy system.speach.dll . Fontos , hogy a dll-ünk , amire hivatkozni fogunk az indikátorunkban .net 3.5 , re vagy korábbira legyen fordítva , a 4.0 ás a Ninjatrader 7.10 –es verziójában sajnos nem támogatott.
A filunkat valószinűleg a C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0 –mappában találjuk meg.
Ezt a file-t includoljuk a projektünkhöz:
A példaprogram , amit mutatok az alapján ad jelet , ha a gyertya a Bollinger szalag felett vagy alatt zár:
1. lépés: meghívjuk a using dirktíváknál a speech dll-ünket.
using System.Speech.Synthesis;
2.lépés: Az onBarUpdate modulban megírjuk a jelző programkódot
if(Historical == false && Close[0] > Bollinger(2, 20).Upper[0]){
//ha a gyertya a Bollinger szallag felett zár és nem hisztorikus adatokról van szó
using (SpeechSynthesizer beszed = new SpeechSynthesizer())
//meghívjuk a Windows beszéd objektumát
{
beszed.Speak("Up"); //kimondatjuk vele a jelzésünket
}
}
if(Historical == false && Close[0] < Bollinger(2, 20).Lower[0]){
//ha a gyertya a Bollinger szallag alatt zár és nem hisztorikus adatokról van szó
using (SpeechSynthesizer beszed = new SpeechSynthesizer())
//meghívjuk a Windows beszéd objektumát
{
beszed.Speak("Down"); //kimondatjuk vele a jelzésünket
}
}
3. lépés Program lefordítása , használata.
Remélem hasznos leírást sikerült nyújtanom azok számára , akik ilyesmiben gondolkoztak
_________________________________________________________________________
Update 2013. február 21.
Kicsit frissítettem / bonyolítottam ezen a hangértesítés modulon. A lényege , hogy ha magyarul szeretnénk valamit kimondatni a számítógépünkkel , akkor nem tudjuk használni a fent említett megoldást. De hát természetesen erre is van megoldás.
A google translaternek van egy olyan funkciója, hogy fel tudja olvasni a beírt szövegeket , akár magyarul is , ezt használjuk ki egy programmal.
#region voicer
private void voice(string szoveg)
{
if( voicee == false ){return;}
var text = szoveg;
string[] rosszkarakterek =new string[5];
rosszkarakterek[0]="_";
rosszkarakterek[1]="-";
rosszkarakterek[2]="?";
rosszkarakterek[3]=".";
rosszkarakterek[4]="#";
for (int i=0 ;i<=4;i++)
{text=text.Replace(rosszkarakterek[i],"");}
var url = "http://translate.google.com/translate_tts?tl=hu&q=" + text;
using (var client = new WebClient())
{try{
client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1";
client.DownloadFile(url, "temp.mp3");
string FileName = "temp.mp3";
long lejatszas = mciSendString("open \"" + FileName + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
lejatszas = mciSendString("play " + FileName + " from 0", null, 0, IntPtr.Zero);
string playCommand = "Close MediaFile";
mciSendString(playCommand, null, 0, IntPtr.Zero);
}catch{Print("Hiba a voice modulban- Playing Error");}
}
}
#endregion
A program működési elve a következő: elküldi a google translaternek a program a szöveget, és az audióformátumre konvertálja. Az audiófile-t (temp.mp3) letöltjük és windows media playerrel lejátszuk.
Bemutató videó: