|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL5 Hier gehts rund ums Programmieren in MQL5. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
EasyAndFastGUI Wie Graph erstellen?
Hallöchen in den Programmierkurs den ich belegt habe haben wir die EasyAndFastGui Bibliothek behandelt. Leider wurde das Thema sehr kurz angerissen. Eine Übungsaufgabe war ein Tradepanel zu schreiben was auch wirklich einfach war. Nun dachte ich das ich auf der Basis des erlangten Wissen ein Panel Schreibe was einen Graph beinhaltet. Nun weis ich nicht wie ich bei der 2. stelle bei "CreateGraph" die geforderte CElement Main eingeben muss
Mir erschließt sich nicht wie ich das angeben soll. Habt ijr eine idee? Code:
//+------------------------------------------------------------------+ //| GUI.mq5 | //| Copyright 2021, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #include <EasyAndFastGUI\WndCreate.mqh> ulong magic=123; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CProgram: public CWndCreate { private: CWindow m_window; CGraph m_gra; public: void CreateGui() { CWndCreate::CreateWindow(m_window,"Test",20,20,600,300); CWndCreate::CreateGraph(m_gra,m_gra.Element(0),0,5,14,true,false,10,23,false,false,AXIS_TYPE_DOUBLE,DoubleToString(2.644),DoubleToString(8.398)); CWndEvents::CompletedGUI(); } void OnTimerEvent() { CWndEvents::OnTimerEvent(); } void OnInitEvent() { } void OnTickEvent() { } void OnTradeTransactionEvent(double lineval1,ulong inmagic) { //double lineval1 = Profit der gesammten History //double lineval2= Profit der geschlossenen Position nach magic //double lineval3= Kommt von Framework //Graph erstellen ähnlich der Grafik } void OnDeinitEvent(const int reason) { CWndEvents::Destroy(); } void OnEvent(const int id,const long& lparam,const double& dparam,const string& sparam) { } }; CProgram programm; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- programm.OnInitEvent(); programm.CreateGui(); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- programm.OnDeinitEvent(reason); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- programm.OnTickEvent(); programm.OnTimerEvent(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTimer() { programm.OnTimerEvent(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnChartEvent(const int id, // Identifikator des Ereignisses const long& lparam, // Parameter des Ereignisses des Typs long const double& dparam, // Parameter des Ereignisses des Typs double const string& sparam // Parameter des Ereignisses des Typs string ) { programm.ChartEvent(id,lparam,dparam,sparam); } //+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { //--- ENUM_DEAL_TYPE deal_direktion=DEAL_TYPE_BUY; long deal_entry =0; string deal_symbol =""; long deal_magicn =0; double deal_profit =0; double deal_priceout=0; datetime deal_time =0; //--- get transaction type as enumeration value ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- if transaction is result of addition of the transaction in history if(type==TRADE_TRANSACTION_DEAL_ADD) { if(HistoryDealSelect(trans.deal)) { deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY); deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL); deal_magicn=HistoryDealGetInteger(trans.deal,DEAL_MAGIC); deal_direktion=(ENUM_DEAL_TYPE)HistoryDealGetInteger(trans.deal,DEAL_TYPE); deal_priceout=HistoryDealGetDouble(trans.deal,DEAL_PRICE); deal_profit=HistoryDealGetDouble(trans.deal,DEAL_PROFIT); deal_time=(datetime)HistoryDealGetInteger(trans.deal,DEAL_TIME); } } if(deal_entry==DEAL_ENTRY_OUT) { if(magic==deal_magicn) programm.OnTradeTransactionEvent(deal_profit,deal_magicn); } } //+------------------------------------------------------------------+ Die entsprechende BIbliothek findet ihr im Anhang als ZIP |
|
|||
Was für einen Programmierkurs und wo hast Du den für wie viel absolviert?
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Bei BM-Trading den Mql5 MasterClass Kurs..
kost so um die 450 |
|
|||
Soooo endlich n Graph!
Code:
//+------------------------------------------------------------------+ //| GUITest.mq5 | //| Manuel Simon | //| https://www.mql5.com/de/users/aleksi-trader | //+------------------------------------------------------------------+ #property copyright "Manuel Simon" #property link "https://www.mql5.com/de/users/aleksi-trader" #property version "1.00" #include <EasyAndFastGUI\WndCreate.mqh> ulong magic=123; double x_norm[];//time double y_norm[];//test double y_norm2[];//test //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CProgram: public CWndCreate { private: CWindow m_window; CGraph m_graph1; public: void CreateGui() { CWndCreate::CreateWindow(m_window,"Test",20,20,800,600); CreateGraph1(2,50); CWndEvents::CompletedGUI(); } void OnTimerEvent() { CWndEvents::OnTimerEvent(); } void OnInitEvent() { } void OnTickEvent() { } void InitArrays() { int arraysize= 3;//HistoryDealsTotal(); ArrayResize(x_norm,arraysize); ArrayResize(y_norm,arraysize); ArrayResize(y_norm2,arraysize); x_norm[0]=(double)TimeCurrent(); //Zeitachse Value y_norm[0]=1000; // testachse1 value y_norm2[0]=1067; // testachse1 value } bool CreateGraph1(int x_gap,int y_gap) { m_graph1.MainPointer(m_window); InitArrays(); m_graph1.AutoXResizeMode(true); m_graph1.AutoXResizeRightOffset(2); if(!m_graph1.CreateGraph(x_gap,y_gap)) return(false); CGraphic *graph=m_graph1.GetGraphicPointer(); graph.BackgroundColor(::ColorToARGB(clrWhiteSmoke)); CAxis *x_axis=graph.XAxis(); x_axis.AutoScale(true); x_axis.Type(AXIS_TYPE_CUSTOM); x_axis.ValuesFunctionFormat(TimeFormat); CCurve *curve1=graph.CurveAdd(y_norm,::ColorToARGB(clrCornflowerBlue),CURVE_LINES,"test achse1"); CCurve *curve2=graph.CurveAdd(y_norm2,::ColorToARGB(clrRed),CURVE_LINES,"test achse2"); x_axis.DefaultStep(10); graph.CurvePlotAll(); graph.Update(true); CWndContainer::AddToElementsArray(0,m_graph1); return(true); } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string TimeFormat(double x,void *cbdata) { return(TimeToString((datetime)x_norm[ArraySize(x_norm)-(int)x-1])); } CProgram Program; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- Program.CreateGui(); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- Program.OnTickEvent(); } //+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { //--- } //+------------------------------------------------------------------+ Hätte jemand eine Idee? |
|
||||
Über iClose() und die anderen standard Funktionen, oder was meinst du sonst mit historischen Daten?
|
|
|||
Okay hab mich unglücklich ausgedrückt, meine Idee ist es die Kapitalkurve zu zeichnen, also muss ich in der History die Profite der abgeschlossenen Deals holen..
Ist ja keine Kunst, die Werte der History (profit,dealtime) sind dann in einer Struktur als Array gespeichert. Allerdings ist mir unklar wie ich jetzt die einzelen Arrays an den Graph übermitteln soll. So speicher ich das ganze in nem Array: Code:
void InitArrays() { HistorySelect(0,TimeCurrent()); int deals=HistoryDealsTotal(); ArrayResize(x_norm,deals); ArrayResize(y_norm,deals); ArrayResize(y_norm2,deals); for(int i=0; i<deals; i++) { ulong deal_ticket=HistoryDealGetTicket(i); if(deal_ticket>0) { string symbol=HistoryDealGetString(deal_ticket,DEAL_SYMBOL); datetime time=(datetime)HistoryDealGetInteger(deal_ticket,DEAL_TIME); ulong order =HistoryDealGetInteger(deal_ticket,DEAL_ORDER); long pos_ID =HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID); ENUM_DEAL_ENTRY entry_type=(ENUM_DEAL_ENTRY)HistoryDealGetInteger(deal_ticket,DEAL_ENTRY); if(entry_type==DEAL_ENTRY_OUT) { x_norm[i]=(double)time; //Zeitachse Value y_norm[i]=HistoryDealGetDouble(deal_ticket,DEAL_PROFIT); //Testachse1 value } } else { PrintFormat("Kein Deal in Auflistung %d. Fehler %d",i,GetLastError()); } } } |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|