Tornando all'argomento del thread. I risultati del sondaggio "Che piattaforma usi? " sono stati pubblicati una o due ore fa http://ru.forexmagnates.com/rezultatyi-oprosa-kakoy-platformoy-vyi-polzuetes/:
"Così, secondo i risultati del voto, la piattaforma MetaTrader 4 del fornitore di software di trading MetaQuotes vince con un vantaggio significativo, la preferenza del 63% dei partecipanti. Il prodotto di punta dello stesso provider, MetaTrader 5, ha ricevuto il 19% dei voti. Allo stesso tempo, il 21% di coloro che hanno votato usano "altre" piattaforme di trading, non elencate nella lista".
В конце прошлой недели редакция Forex Magnates провела среди пользователей ресурса опрос на тему «Какой платформой вы пользуетесь?». Сегодня мы опубликуем результаты и выясним, какой торговой платформе отдают предпочтение розничные участники внебиржевого рынка Форекс. Итак, по результатам голосования, с существенным преимуществом побеждает...
Solo che non ho il tempo di provarlo in questo momento.
Non ho studiato il codice di Peter in dettaglio, ma l'ho analizzato attraverso il profiling. L'intero ciclo di generazione dei dati ha richiesto circa 1 microsecondo. Questo è il miglior risultato finora con l'ipotesi che non saranno necessarie correzioni globali nel codice per renderlo completamente funzionante.
La sua soluzione funziona bene? Se è buono, è grande.
Che ne dite di centinaia di strumenti - non ci sarà una sovrapposizione?
Come ho detto subito "non è un capolavoro", è solo uno sforzo da autodidatta per imparare l'OOP. Ma funziona senza alcun problema. Prima di questo, mql4 funzionava bene in mql5, ma non funzionava bene. Ho un argomento da qualche parte - ho avuto una lunga discussione di alto livello con Drummer...
Forse dovrete aggiungere un'altra variante alla funzione per centinaia di strumenti, ma il nome rimarrà lo stesso. E questo è, secondo me, il più piacevole vantaggio dell'OOP. Se padroneggiate OOP più a fondo, potreste trovare vantaggi ancora più piacevoli, ma... non nella mia vita...
Solo che non ho il tempo di provarlo in questo momento.
Non ho studiato il codice di Peter in dettaglio, ma l'ho analizzato attraverso il profiling. L'intero ciclo di generazione dei dati ha richiesto circa 1 microsecondo. Questo è il miglior risultato finora con l'ipotesi che non saranno necessarie correzioni globali nel codice per renderlo completamente funzionante.
Non avete idea dell'idiozia che avete dimostrato, è una completa anormalità. Ma non vi mostrerò esattamente dove, perché a tutti voi non interessa la mia opinione)))
Chiunque è interessato a un'opinione solo con argomenti validi.
L'argomento "devi farlo perché lo faccio io" non interessa a nessuno.
In questo caso particolare, i nomi delle variabili non corrispondono a ciò che viene accettato è un argomento debole. Questo non è stato scritto per CodeBase.
Finora anche MOFT non supporta MT5, il che è frustrante per me, dato che ho iniziato a lavorare sugli spreads. E cosa significa sostegno? Rilascio di nuove versioni? Beh, se non si trovano bug critici, forse non ce ne saranno di nuovi.
Ho in parte strisciato su MT5, ma come giustamente sottolineato da Dmitiry, le condizioni sono migliori su MT4 per ora.
Non lo è. La velocità e la qualità dell'esecuzione degli ordini in MT5 creano un bell'ambiente per abituarsi al meglio (ci sono spreads sani e, in effetti, molto bassi durante i periodi di liquidità, l'esempio è lo stesso Robo(MT5)). Il che a sua volta dà vantaggi al limite degli ordini a certi livelli di liquidità. /*<= e questo può più che compensare l'overhead (spread e commissione se il conto ha una commissione).
Da esempi di questo /*le frecce verdi sono i livelli limite che ho impostato, e le frecce dal rosso al blu sono come l'ordine effettivo ha funzionato*/:
Questa variante della funzione non ha alcuna funzione New_bar();
Questa è l'opzione con il maggior risparmio di risorse che ho fornito. Inoltre, ha un altro vantaggio: il nuovo evento barra viene salvato tutte le volte che il codice utente viene eseguito su un evento timer o tick.
In precedenza, si poteva ottenere questo evento solo una volta e il flag veniva cancellato con New_bar(). La funzione speciale ora cancella l'array "event_new_bar[][]" una volta al minuto e viene chiamata solo dopo l'esecuzione del codice personalizzato.
Le funzioni personalizzate possono accedere direttamente all'array e recuperare nuove informazioni sull'evento barra tutte le volte che il codice viene eseguito su un evento timer o tick.
Le risorse vengono risparmiate ancora di più.
//+------------------------------------------------------------------+//| Новый бар 3.mq4 |//| Peter Konow |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Peter Konow"#property link"https://www.mql5.com"#property version"1.00"#property strict//+------------------------------------------------------------------+datetime Время_последнего_бара;
int Частота_таймера = 25;
int Всех_символов;
string Символы[];
int Таймфреймы[7] = {PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1};
int Всех_таймфреймов = 7;
int Количество_баров[][7];
bool События_нового_бара[][7];
//+------------------------------------------------------------------+#define M1 0#define M5 1#define M15 2#define M30 3#define H1 4#define H4 5#define D1 6//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- create timerEventSetMillisecondTimer(25);
//-------------------------------------------------------------//Записываем время последнего бара на момент загрузки эксперта. //Для корректного начала работы, робота нужно запустить на М1. //-------------------------------------------------------------
Время_последнего_бара = Time[0];
//------------------------------------------------------------- //Узнаем сколько символов есть в обзоре рынка.//---------------------------------------------------------
Всех_символов = SymbolsTotal(true);
//--------------------------------------------------------- //Устанавливаем размер массива Символы. Внутри него будут записаны//имена всех символов, которые есть в окне обзоре рынка.//---------------------------------------------------------ArrayResize(Символы,Всех_символов);
//---------------------------------------------------------//Устанавливаем размеры массивов "Количество_баров[]" и "События_нового_бара[]".//В массиве "Количество_баров[]" будет записыватся текущее количество баров каждого символа//и каждого таймфрейма. А в массиве "События_нового_бара[]" устанавливаться флаги//события нового бара для каждого символа и каждого таймфрейма. //---------------------------------------------------------ArrayResize(Количество_баров,Всех_символов);
ArrayResize(События_нового_бара,Всех_символов);
//---------------------------------------------------------//Записываем наименования символов обзора рынка в массив "Символы[]".//---------------------------------------------------------for(int a1 = 0; a1 < Всех_символов; a1++)
{
Символы[a1] = SymbolName(a1 + 1,true);
//Возможно, нумерация символов в обзора рынка идет с нуля.//Тогда: Символы[a1] = SymbolName(a1,true);
}
//---------------------------------------------------------return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- destroy timerEventKillTimer();
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
staticbool Начало_отсчета;
staticint Минута;
//---------------------------//Нам нужен корректный старт отсчета. Это должно быть время начала бара.//---------------------------if(!Начало_отсчета && Время_последнего_бара != Time[0])Начало_отсчета = true;
//--------------------------- if(Начало_отсчета)Минута++;
//--------------------------- //В следующем цикле, мы будем обращатся к функции iBars для получения количества баров на //каждом из символов и таймфреймов, которые будем проходить в цикле.//Далее, будем сравнивать записанное количество баров с текущим и при //наличии разницы установим флаг события нового бара в массив "События_нового_бара[]".//---------------------------if(Минута*Частота_таймера >= 60000)
{
for(int a1 = 0; a1 < Всех_символов; a1++)
{
string Этот_символ = Символы[a1];
//---------------------------------for(int a2 = 0; a2 < Всех_таймфреймов; a2++)
{
int Этот_таймфрейм = Таймфреймы[a2];
//------------------------------------------int Текущее_количество_баров = iBars(Этот_символ,Этот_таймфрейм);
//------------------------------------------if(Текущее_количество_баров > Количество_баров[a1][a2])
{
//------------------------------------------------------------//Если это не самая первая запись в массив Количества баров,//то фиксируем событие нового бара.//------------------------------------------------------------if(Количество_баров[a1][a2])
{
События_нового_бара[a1][a2] = true;
}
//------------------------------------------------------------//Устанавливаем новое значение текущего количества баров.//------------------------------------------------------------
Количество_баров [a1][a2] = Текущее_количество_баров;
}
//------------------------------------------
}
}
//---------
Минута = 0;
}
//-----------------------------------------------//Здесь наш код...//Здесь наш код...//Здесь наш код...//-----------------------------------------------//После завершения всех вызовов на этом событии таймера//снимаем флаги событий нового бара.if(!Минута)Снять_событие_нового_бара();
//-----------------------------------------------
}
//+------------------------------------------------------------------+//Функция снимает флаги событий нового бара.//Эта процедура осуществляется после выполнения всего пользовательского//кода один раз в минуту. Вплоть до момента очищения массива флагов //новых баров, все функции могут их видеть обращаясь к массиву напрямую.//+------------------------------------------------------------------+void Снять_событие_нового_бара()
{
for(int a1 = 0; a1 < Всех_символов; a1++)
{
for(int a2 = 0; a2 < Всех_таймфреймов; a2++)
{
События_нового_бара[a1][a2] = false;
}
}
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//Пример использования событий нового бара в пользовательском функционал.//Просто обращаемся к глобальному массиву "События_нового_бара[a1][a2]" напрямую//и используем событие в наших торговых алгоритмах.//+------------------------------------------------------------------+void Моя_стратегия_торговли_на_новых_барах()
{
for(int a1 = 0; a1 < Всех_символов; a1++)
{
string Этот_символ = Символы[a1];
//----------------------------------for(int a2 = 0; a2 < Всех_таймфреймов; a2++)
{
bool Новый_бар = События_нового_бара[a1][a2];
int Этот_таймфрейм = Таймфреймы[a2];
//----------------------------------if(Новый_бар && Этот_символ == "EURUSD" && Этот_таймфрейм == PERIOD_M15)
{
//Купить();
}
//---------------------------------- if(Новый_бар && Этот_символ == "AUDUSD" && Этот_таймфрейм == PERIOD_M30)
{
//Продать();
}
//----------------------------------
}
}
}
//+------------------------------------------------------------------+
Tornando all'argomento del thread. I risultati del sondaggio "Che piattaforma usi? " sono stati pubblicati una o due ore fa http://ru.forexmagnates.com/rezultatyi-oprosa-kakoy-platformoy-vyi-polzuetes/:
"Così, secondo i risultati del voto, la piattaforma MetaTrader 4 del fornitore di software di trading MetaQuotes vince con un vantaggio significativo, la preferenza del 63% dei partecipanti. Il prodotto di punta dello stesso provider, MetaTrader 5, ha ricevuto il 19% dei voti. Allo stesso tempo, il 21% di coloro che hanno votato usano "altre" piattaforme di trading, non elencate nella lista".
Forse non sai cosa significa 'veloce'?
La sua soluzione funziona bene? Se è buono, è grande.
Che ne dite di centinaia di strumenti - non ci sarà una sovrapposizione?
Come ho detto subito "non è un capolavoro", è solo uno sforzo da autodidatta per imparare l'OOP. Ma funziona senza alcun problema. Prima di questo, mql4 funzionava bene in mql5, ma non funzionava bene. Ho un argomento da qualche parte - ho avuto una lunga discussione di alto livello con Drummer...
Forse dovrete aggiungere un'altra variante alla funzione per centinaia di strumenti, ma il nome rimarrà lo stesso. E questo è, secondo me, il più piacevole vantaggio dell'OOP. Se padroneggiate OOP più a fondo, potreste trovare vantaggi ancora più piacevoli, ma... non nella mia vita...
Però credo di saperlo))
In ogni caso, hai dimostrato che non lo sai.
Tuttavia, hai dimostrato di non sapere.
Non avete idea dell'idiozia che avete dimostrato, è una completa anormalità. Ma non vi mostrerò esattamente dove, perché a tutti voi non interessa la mia opinione)))
Chiunque è interessato a un'opinione solo con argomenti validi.
L'argomento "devi farlo perché lo faccio io" non interessa a nessuno.
In questo caso particolare, i nomi delle variabili non corrispondono a ciò che viene accettato è un argomento debole. Questo non è stato scritto per CodeBase.
È divertente il modo in cui vi sedete tutti sull'attizzatoio della croce qui. Continua a sederti, rende il mondo intorno a te più divertente.
È buffo come tutti voi siate seduti sull'attizzatoio della croce qui. Continua a sederti, rende il mondo intorno a te più divertente.
Ben fatto, Dimitri!
Se Peter è un maestro nell'attizzare il fuoco, tu sei un maestro nello spegnerlo ))))
Finora anche MOFT non supporta MT5, il che è frustrante per me, dato che ho iniziato a lavorare sugli spreads. E cosa significa sostegno? Rilascio di nuove versioni? Beh, se non si trovano bug critici, forse non ce ne saranno di nuovi.
Ho in parte strisciato su MT5, ma come giustamente sottolineato da Dmitiry, le condizioni sono migliori su MT4 per ora.
Non lo è. La velocità e la qualità dell'esecuzione degli ordini in MT5 creano un bell'ambiente per abituarsi al meglio (ci sono spreads sani e, in effetti, molto bassi durante i periodi di liquidità, l'esempio è lo stesso Robo(MT5)). Il che a sua volta dà vantaggi al limite degli ordini a certi livelli di liquidità. /*<= e questo può più che compensare l'overhead (spread e commissione se il conto ha una commissione).
Da esempi di questo /*le frecce verdi sono i livelli limite che ho impostato, e le frecce dal rosso al blu sono come l'ordine effettivo ha funzionato*/:
Questa variante della funzione non ha alcuna funzione New_bar();
Questa è l'opzione con il maggior risparmio di risorse che ho fornito. Inoltre, ha un altro vantaggio: il nuovo evento barra viene salvato tutte le volte che il codice utente viene eseguito su un evento timer o tick.
In precedenza, si poteva ottenere questo evento solo una volta e il flag veniva cancellato con New_bar(). La funzione speciale ora cancella l'array "event_new_bar[][]" una volta al minuto e viene chiamata solo dopo l'esecuzione del codice personalizzato.
Le funzioni personalizzate possono accedere direttamente all'array e recuperare nuove informazioni sull'evento barra tutte le volte che il codice viene eseguito su un evento timer o tick.
Le risorse vengono risparmiate ancora di più.