Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Warum?
string symbol_name, // имя символа
MqlTick& ticks_array[], // массив для приёма тиков
uint flags=COPY_TICKS_ALL, // флаг, определяющий тип получаемых тиков
ulong from=0, // дата, начиная с которой запрашиваются тики
uint count=0 // количество тиков, которые необходимо получить
);
string symbol_name, // имя символа
MqlTick& ticks_array[], // массив для приёма тиков
uint flags=COPY_TICKS_ALL, // флаг, определяющий тип получаемых тиков
ulong from=0, // дата, начиная с которой запрашиваются тики
uint count=0 // количество тиков, которые необходимо получить
);
string symbol_name, // имя символа
MqlTick& ticks_array[], // массив для приёма тиков
uint flags=COPY_TICKS_ALL, // флаг, определяющий тип получаемых тиков
ulong from=0, // дата, начиная с которой запрашиваются тики
uint count=0 // количество тиков, которые необходимо получить
);
Ja, die Größe der Ticks im Cache kann in der Dokumentation explizit angegeben werden. Wenn Sie den gesamten Cache erhalten möchten, sehen Sie in der Dokumentation nach und fragen Sie die erforderliche Anzahl mit der Funktion ab, mit Parametern wie hier:
intCopyBuffer(
intindicator_handle,// Indikator-Handle
intbuffer_num,// Nummer des Anzeigepuffers
intstart_pos,//Anfangspunkt
intcount,// wie viele wir kopieren
doublebuffer[]// Array, in das die Daten kopiert werden
);
Alles ist schon erfunden worden, warum sollte man etwas Neues erfinden?
Ich denke, es ist viel wichtiger, einen Download auf das aktuelle Datum durchzuführen, als zu versuchen, die Standardeinstellungen beizubehalten.
So wird es von Datum zu Datum sein. CopyTicks, die versuchen, in der Syntax mit Copy-Funktionen übereinzustimmen, nur weil das Wort Copy im Namen vorkommt, ist nicht sinnvoll. Praktisch und gerechtfertigt ist es, wenn Sie Präprozessor-Zeug wie dieses machen können
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define DEFINE_TIMESERIE(NAME,FUNC,T) \
class CLASS##NAME \
{ \
public: \
static T Get( const string Symb, const int TimeFrame, const int iShift ) \
{ \
T tValue[]; \
\
return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
} \
\
T operator []( const int iPos ) const \
{ \
return(CLASS##NAME::Get(_Symbol, _Period, iPos)); \
} \
}; \
\
CLASS##NAME NAME; \
\
T i##NAME( const string Symb, const int TimeFrame, const int iShift ) \
{ \
return(CLASS##NAME::Get(Symb, TimeFrame, iShift)); \
}
DEFINE_TIMESERIE(Volume, TickVolume, long)
DEFINE_TIMESERIE(Time, Time, datetime)
DEFINE_TIMESERIE(Open, Open, double)
DEFINE_TIMESERIE(High, High, double)
DEFINE_TIMESERIE(Low, Low, double)
DEFINE_TIMESERIE(Close, Close, double)
So wird es von Datum zu Datum sein. CopyTicks, die versuchen, die Syntax an Copy-Funktionen anzupassen, nur weil Copy im Namen vorkommt, ist unpraktisch. Praktisch und gerechtfertigt ist es, wenn man so etwas mit dem Präprozessor machen kann.
class CLASS##NAME \
{ \
public: \
static T Get( const string Symb, const int TimeFrame, const int iShift ) \
{ \
T tValue[]; \
\
return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
} \
\
T operator []( const int iPos ) const \
{ \
return(CLASS##NAME::Get(_Symbol, _Period, iPos)); \
} \
}; \
\
CLASS##NAME NAME; \
\
T i##NAME( const string Symb, const int TimeFrame, const int iShift ) \
{ \
return(CLASS##NAME::Get(Symb, TimeFrame, iShift)); \
}
DEFINE_TIMESERIE(Volume, TickVolume, long)
DEFINE_TIMESERIE(Time, Time, datetime)
DEFINE_TIMESERIE(Open, Open, double)
DEFINE_TIMESERIE(High, High, double)
DEFINE_TIMESERIE(Low, Low, double)
DEFINE_TIMESERIE(Close, Close, double)
Bevor Sie im Forum aufgetaucht sind, hatte ich diese Art zu schreiben noch nicht kennengelernt, wofür ich Ihnen natürlich danke, aber ich bin mir nicht sicher, ob viele Programmierer sie nützlich finden würden.
Bei Ihrer Demo ist das in der Tat der Fall. Bei BCS ist das nicht der Fall.
2016.10.18 15:12:32.949 Test14 (Si-12.16,M1) Time: 29089 msc for 1503 records
2016.10.18 15:12:32.822 Test14 (Si-12.16,M1) Time: 33207 msc for 1501 records
2016.10.18 15:12:32.639 Test14 (Si-12.16,M1) Time: 21389 msc for 1500 records
2016.10.18 15:12:31.959 Test14 (Si-12.16,M1) Time: 21926 msc for 1500 records
Und bei Alpari ist es gar nicht gut.
2016.10.18 15:14:47.159 Test14 (GBPUSD,M1) Time: 31086 msc for 1836 records
2016.10.18 15:14:46.999 Test14 (GBPUSD,M1) Time: 30698 msc for 1836 records
2016.10.18 15:14:46.779 Test14 (GBPUSD,M1) Time: 46306 msc for 1836 records
2016.10.18 15:14:46.612 Test14 (GBPUSD,M1) Time: 30440 msc for 1836 records
2016.10.18 15:14:46.532 Test14 (GBPUSD,M1) Time: 36227 msc for 1836 records
Oben wurde bereits über die Unannehmlichkeiten von Copytix gesprochen. Der vorgestellte Indikator verlangsamt sich, weil ich Copytix mehrmals aufrufen muss. Und alle Verzögerungen sind darauf zurückzuführen. Der Punkt ist folgender
Die Lösung wurde bereits vorgeschlagen.
Um nun Ticks zwischen den Daten herunterzuladen, müssen Sie Anfragen für eine beliebige Anzahl von Ticks stellen, beginnend mit dem Startdatum. Und dann schauen Sie jedes Mal, ob es das Enddatum erreicht hat. Und wenn man bedenkt, dass jede Copytix-Anfrage sehr teuer ist und man solche Bremsen bekommt.
Daten aus echter Öffnung, es werden nur frische Ticks geladen:
2016.10.20 18:47:06.499 GetTickHistory: Получены все доступные тики. Время [0]: 2016.10.20 16:47
2016.10.20 18:47:06.499 GetTickHistory: Получено 3 тиков за 20 мкс (пинг = 62214 мкс)
2016.10.20 18:47:06.499 GetTickHistory: Получены все доступные тики. Время [0]: 2016.10.20 16:47
2016.10.20 18:47:06.499 GetTickHistory: Получено 3 тиков за 19 мкс (пинг = 62214 мкс)
2016.10.20 18:47:06.499 GetTickHistory: Получены все доступные тики. Время [0]: 2016.10.20 16:47
2016.10.20 18:47:06.540 GetTickHistory: Получено 8 тиков за 107 мкс (пинг = 62214 мкс)
2016.10.20 18:47:06.540 GetTickHistory: Получены все доступные тики. Время [0]: 2016.10.20 16:47
2016.10.20 18:47:06.540 GetTickHistory: Получено 5 тиков за 19 мкс (пинг = 62214 мкс)
2016.10.20 18:47:06.540 GetTickHistory: Получены все доступные тики. Время [0]: 2016.10.20 16:47
2016.10.20 18:47:06.540 GetTickHistory: Получено 5 тиков за 19 мкс (пинг = 62214 мкс)
2016.10.20 18:47:06.540 GetTickHistory: Получены все доступные тики. Время [0]: 2016.10.20 16:47
2016.10.20 18:47:06.540 GetTickHistory: Получено 5 тиков за 18 мкс (пинг = 62214 мкс)
2016.10.20 18:47:06.540 GetTickHistory: Получены все доступные тики. Время [0]: 2016.10.20 16:47
CopyTicks() scheint eine asynchrone Funktion zu sein?
Ich bin das Terminal leid. Das Drehbuch
{
MqlTick Ticks[];
Print(CopyTicks(_Symbol, Ticks));
Print(GetLastError());
}
hängt. Wenn Sie es manuell löschen, wird es abgemeldet.
2016.10.28 16:48:57.737 Test (GBPUSD,M1) -1
Ändern von TF und Symbol - ähnlich. Nach dem Neustart funktioniert es.