Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL5 (http://www.expert-advisor.com/forum/forumdisplay.php?f=221)
-   -   EasyAndFastGUI Wie Graph erstellen? (http://www.expert-advisor.com/forum/showthread.php?t=7156)

Aleksi 16.02.22 17:49

EasyAndFastGUI Wie Graph erstellen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
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);
    }

  }

//+------------------------------------------------------------------+

man bedenke das "m_gra.Element(0)" mein versuch war das Element anzugeben

Die entsprechende BIbliothek findet ihr im Anhang als ZIP

traderdoc 16.02.22 21:21

Was für einen Programmierkurs und wo hast Du den für wie viel absolviert?

traderdoc

Aleksi 16.02.22 21:34

Bei BM-Trading den Mql5 MasterClass Kurs..
kost so um die 450

Aleksi 18.02.22 13:06

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)
  {
//---

  }
//+------------------------------------------------------------------+

Jetzt ist nur noch die Fage wie ich meine Historischen Daten da rein bekomme.
Hätte jemand eine Idee?

Indikator-Trading 20.02.22 12:37

Über iClose() und die anderen standard Funktionen, oder was meinst du sonst mit historischen Daten?

Aleksi 20.02.22 12:47

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());
          }
        }

    }

Kann sein das ich noch in dieser Funktion erst noch die Profite zusammenrechnen muss aber das ist ja auch n Kinderspiel


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:11 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum