Diskussion zum Artikel "Verwendung von Netzwerkfunktionen oder MySQL ohne DLL: Teil II - Programm zur Überwachung von Änderungen der Signaleigenschaften"
Das ist eine tolle und praktische Anwendung!
Es ist schade, dass MQ diese Daten nicht für alle Signale sammelt (oder zugänglich macht?). Es wäre eine nützliche Datenbank.
Am Ende ist eine coole und praktische Anwendung herausgekommen!
Es ist schade, dass MQ diese Daten nicht für alle Signale sammelt (oder zugänglich macht?). Es wäre eine nützliche Datenbank.
Was meinen Sie mit "nicht sammeln", wenn die Datenbank aus ihrer API generiert wird? Sie sammeln sie nicht nur nicht, sie verschenken sie.
Ich bin eher "erfreut", dass man jetzt auf die Abhängigkeit von MySQL verzichten und das Projekt an das eingebaute SQLite anpassen kann.
- www.mql5.com
Was meinen Sie mit "nicht sammeln", wenn die Datenbank aus ihrer API generiert wird? Sie sammeln nicht nur nicht, sie verschenken sie.
Sie sammeln keine Historie. Sie geben nur den aktuellen Stand weiter.
Und es ist interessant zu sehen, wie sich zum Beispiel die Position in der Bewertung oder die Anzahl der Abonnenten im Laufe der Zeit verändert.
Ähnlicher Artikel: SQLite: Native Arbeit mit SQL-Datenbanken in MQL5
Jetzt können Sie mit Datenbanken arbeiten und große Volumina nativ in MQL5 betreiben, dutzendfach schneller als mit externen SQL-Servern. Erreicht wird dies durch die nahtlose Integration der schnellen SQLite-Engine in das MQL5-Subsystem und die vollständige Eliminierung von Netzwerkoperationen.
Der neue Artikel MySQL ohne Anwendung von Netzwerkfunktionen oder DLLs: Teil II - Programme zur Überwachung von Änderungen in den Signaleigenschaften wurde veröffentlicht:.
Autor: Serhii Shevchuk
All dies ist gut, aber ein ABER!
Beim Testen in Testor über Steckdose ausgeschaltet ist, wie ich verstehe, und Daten werden nicht zurückgesetzt werden. Und es ist sehr wichtig, Daten zu verwenden, wenn Produkte zu testen.
Das ist ja alles schön und gut, aber es gibt ein ABER!
Beim Testen in Testor über die Steckdose ausgeschaltet ist, wie ich verstehe, und Daten werden nicht zurückgesetzt werden. Und es ist sehr wichtig, Daten beim Testen von Produkten zu verwenden.
- www.mql5.com
Ich habe es in meinem EA ohne Probleme implementiert, es kompiliert perfekt, aber manchmal tritt ein Fehler auf und der EA wird geschlossen.
array out of range in 'MySQLTransaction.mqh' (365,36)
//+------------------------------------------------------------------+
//| Parse received data |
//+------------------------------------------------------------------+
ENUM_TRANSACTION_STATE CMySQLTransaction::Incoming(uchar &data[], uint len)
{
int ptr=0; // index of the current byte in the 'data' buffer
ENUM_TRANSACTION_STATE result=MYSQL_TRANSACTION_IN_PROGRESS; // result of handling accepted data
while(len>0)
{
if(m_packet.total_length==0)
{
//--- If the amount of data in the packet is unknown
while(m_rcv_len<4 && len>0)
{
m_hdr[m_rcv_len] = data[ptr];
m_rcv_len++;
ptr++;
len--;
}
//--- Received the amount of data in the packet
if(m_rcv_len==4)
{
//--- Reset error codes etc.
m_packet.Reset();
m_packet.total_length = reader.TotalLength(m_hdr);
m_packet.number = m_hdr[3];
//--- Length received, reset the counter of length bytes
m_rcv_len = 0;
//--- Highlight the buffer of a specified size
if(ArrayResize(m_packet.data,m_packet.total_length)!=m_packet.total_length)
return MYSQL_TRANSACTION_ERROR; // internal error
}
else // if the amount of data is still not accepted
return MYSQL_TRANSACTION_IN_PROGRESS;
}
//--- Collect packet data
while(len>0 && m_rcv_len<m_packet.total_length)
{
m_packet.data[m_rcv_len] = data[ptr];
m_rcv_len++;
ptr++;
len--;
}
//--- Make sure the package has been collected already
if(m_rcv_len<m_packet.total_length)
return MYSQL_TRANSACTION_IN_PROGRESS;
//--- Handle received MySQL packet
m_packet.index = 0;
m_packet.type = MYSQL_PACKET_NONE;
if(m_packet.total_length>0)
{
if(m_packet.data[0]==0)
{
//--- Ok packet
m_packet.type = MYSQL_PACKET_OK;
m_packet.index++;
m_packet.affected_rows = reader.GetDataFieldLen(&m_packet);
m_packet.last_id = reader.GetDataFieldLen(&m_packet);
m_packet.server_status = reader.Uint16(&m_packet);
m_packet.warnings = reader.Uint16(&m_packet);
if(m_packet.index<m_packet.total_length)
m_packet.message = reader.DfString(&m_packet);
if((result = PacketOkHandler(&m_packet))==MYSQL_TRANSACTION_ERROR)
break;
}
else
if(m_packet.data[0]==0xfe)
{
//--- End Of File packet
m_packet.type = MYSQL_PACKET_EOF;
m_packet.index++;
m_packet.warnings = reader.Uint16(&m_packet);
m_packet.server_status = reader.Uint16(&m_packet);
if((result = PacketEOFHandler(&m_packet))==MYSQL_TRANSACTION_ERROR)
break;
}
else
if(m_packet.data[0]==0xff)
{
//--- Error packet
m_packet.type = MYSQL_PACKET_ERROR;
m_packet.index++;
m_packet.error.code = reader.Uint16(&m_packet);
if((result = PacketErrorHandler(&m_packet))==MYSQL_TRANSACTION_ERROR)
break;
}
else
if(!m_packet.number && m_packet.data[0]==0x0a)
{
//--- Greeting packet
m_packet.type = MYSQL_PACKET_GREETING;
if((result = PacketGreetingHandler(&m_packet))==MYSQL_TRANSACTION_ERROR)
break;
}
else
{
//--- Data packet
m_packet.type = MYSQL_PACKET_DATA;
if((result = PacketDataHandler(&m_packet))==MYSQL_TRANSACTION_ERROR)
break;
}
}
m_rcv_len = 0;
m_packet.total_length = 0;
}
return result;
} Dieser Fehler tritt auch auf, wenn Algotrading deaktiviert ist.
Ich habe es in meinem EA ohne Probleme implementiert, es kompiliert perfekt, aber manchmal tritt ein Fehler auf und der EA wird geschlossen.
Array außerhalb des Bereichs in 'MySQLTransaction.mqh' (365,36)
Dieser Fehler tritt auch auf, wenn Algotrading deaktiviert ist.
Ich versuche gerade, den MySQL-Teil des Systems zu verwenden, aber ich erhalte immer wieder die Fehlermeldung "No database selected" - selbst wenn ich den Befehl "use `mytable`" gebe.
Haben Sie eine Idee, warum das so ist?
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Verwendung von Netzwerkfunktionen oder MySQL ohne DLL: Teil II - Programm zur Überwachung von Änderungen der Signaleigenschaften :
Im vorherigen Teil haben wir die Implementierung des MySQL-Konnektors besprochen. In diesem Artikel wenden wir uns seiner Anwendung durch die Implementierung eines Dienstes zum Sammeln von Signaleigenschaften und des Programms zum Anzeigen ihrer Änderungen im Laufe der Zeit. Das implementierte Beispiel ist praktisch sinnvoll, wenn Nutzer Änderungen an Eigenschaften beobachten müssen, die auf der Webseite des Signals nicht angezeigt werden.
Die Anwendung in Aktion ist in Abb. 6 dargestellt.
Abb. 6. Das Programm zum Betrachten der Dynamik von Signaleigenschaften in Aktion
Autor: Serhii Shevchuk