V dnešním tutoriálu si ukážeme, jak přenášet informace - proměnné mezi studiemi nasazenými na různých grafech. Může se jednat o grafy s různými instrumenty, nebo timeframy. (Tento článek vzniká jako reakce na dotaz freezyho).
Proměnné mezi různými grafy lze přenášet pomocí persistentních proměnných. Persistentní proměnné dokáží přežít cyklus studie. Více o perzistetntních proměnných v tomto workshopu (od 1 hod 11 min):
Pro přenos potřebujeme vytvořit 2 studie. První studie bude v zájmovém grafu ukládat požadovanou hodnotu do příslušné persistentní proměnné. Druhá studie bude v cílovém grafu tuto hodnotu načítat (například pro další libovolný výpočet nebo porovnávání).
SCSFExport scsf_UlozeniPersistentni(SCStudyInterfaceRef sc) { if (sc.SetDefaults) { sc.GraphName = "Graf s persistentni promennou"; sc.FreeDLL = 0; return; } // vytvoříme si například 2 persistentní proměnné int& MojePers0 = sc.GetPersistentInt(0); // v závorkách je klíč persistentní 0 int& MojePers1 = sc.GetPersistentInt(1); // klíč 1 // A) do nich si můžeme uložit konstatnty... MojePers0 = 100; MojePers1 = 2000; // B) ...nebo jiné proměnné, které sa váží ke grafu MojePers0 = sc.BidVolume[sc.Index]; // uloží aktuální bid volume aktuálního baru MojePers1 = sc.AskVolume[sc.Index]; // uloží aktuální ask volume aktuálního baru }
Touto studií jsme si uložili zájmové proměnné do persistentních proměnných. V naší druhé studii si nyní tyto persistentní proměnné načteme pomocí speciální funkce.
Pro načtení použijeme funkci
int& GetStudyPersistentIntFromChart(číslo grafu, id studie, klíč persistentní); *
Číslo grafu a ID studie můžeme vyčíst ze Study Settings:
SCSFExport scsf_NacteniPersistentni(SCStudyInterfaceRef sc) { if (sc.SetDefaults) { sc.GraphName = "Nacte persistentni promennou z grafu #5 studie 1"; sc.FreeDLL = 0; return; } int a = sc.GetStudyPersistentIntFromChart(5, 1, 0); // graf 5, studie 1, klíč persistentníInt 0 int b = sc.GetStudyPersistentIntFromChart(5, 1, 1); // graf 5, studie 1, klíč persistentníInt 1 // pro ukázku si můžeme vypsat získané proměnné do MessageLogu: SCString Message; Message = Message.Format("MojePers0 = %i a MojePers1 = %i", a, b); sc.AddMessageToLog(Message, 1); }
Ne vždy však budeme předem vědět, na jaké číslo grafu a číslo studie se budeme dotazovat. Můžeme však využít inputu nastavitelného ve Study Settings této studie následovně:
SCSFExport scsf_NacteniPersistentni(SCStudyInterfaceRef sc) { SCInputRef RefNo = sc.Input[0]; if (sc.SetDefaults) { sc.GraphName = "Nacte persistentni promennou z libovolného grafu"; sc.FreeDLL = 0; RefNo.Name = "Vyber grafu a ID studie"; RefNo.SetChartStudyValues(1, 0); return; } int a = sc.GetStudyPersistentIntFromChart(RefNo.GetChartNumber(), RefNo.GetStudyID(), 0); int b = sc.GetStudyPersistentIntFromChart(RefNo.GetChartNumber(), RefNo.GetStudyID(), 1); // pro ukázku si můžeme vypsat získané proměnné do MessageLogu: SCString Message; Message = Message.Format("MojePers0 = %i a MojePers1 = %i", a, b); sc.AddMessageToLog(Message, 1); }
Nyní si můžeme libovolně volit číslo grafu a id studie pomocí rozbalovacího listu v Study Settings této studie:
Pomocí funkce sc.GetStudyPersistentIntFromChart() můžeme načítat do jedné studie persistentní proměnné z více grafů. Následným zpracováním můžeme například měřit aktuální korelace námi sledovaných gafů.
(*) Nezapoměňte, že je nutné dbát na správné určení typu proměnné a to jak při ukládání do proměnné, tak i při jejím získávání. Existuje tedy speciální funkce pro každý typ proměnné:
sc.GetStudyPersistentIntFromChart()
sc.GetStudyPersistentDoubleFromChart()
sc.GetStudyPersistentFloatFromChart()
sc.GetStudyPersistentIntFromChart()
sc.GetStudyPersistentInt64FromChart()
sc.GetStudyPersistentPointerFromChart()
sc.GetStudyPersistentSCDateTimeFromChart()
sc.GetStudyPersistentSCStringFromChart()