![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
На сайте Альпари http://alpari-idc.ru/ru/dc/databank.php лежат минутки по всем инструментам, включая акции, во всех форматах за несколько лет... :-)
После всех дебатов по поводу данных истории, а также собственного опыта, я усвоил следующее: хоть кирпич положи на кнопку Home, хоть сам на нее сядь, закачается только 16384 бара.
Спасибо.
А почему так мало сделали накопление истории на серверах? Проблема в месте? Сделали бы неограниченным и было бы всем счастье.
После всех дебатов по поводу данных истории, а также собственного опыта, я усвоил следующее: хоть кирпич положи на кнопку Home, хоть сам на нее сядь, закачается только 16384 бара.
Спасибо.
А почему так мало сделали накопление истории на серверах? Проблема в месте? Сделали бы неограниченным и было бы всем счастье.
Выражаю робкое сомнение, что это так. По крайней мере у меня, (с установками на 250 000 баров) в истории баров заметно больше, чем 16000.
Сколько бы ни было у Вас баров в истории, если вы хотите ее пополнить с сервера, то, при наличии там данных, Вы сможете докачать только 16384 бара. Если сомневаетесь - попробуйте сами.
Перенесите свои минутки в другую директорию, откройте терминал и попробуйте закачать историю.
О результатах сообщите.
Перенесите свои минутки в другую директорию, откройте терминал и попробуйте закачать историю.
О результатах сообщите.
Сейчас попробовал скачать минутки инструмента #IBM. Зажал Home и ждал. Уже 17867 записей.
Демо-сервер Альпари.
PS. Может у тебя в настройках макс.баров в истории и в окне маленькие числа стоят?
А пока самый надежный способ такой:
- открываем минутный график требуемой валюты
- выключаем автопоркрутку, смещение, и делаем минимальный масштаб
- кладём кирпич на кнопку Home, и идем курить
- приходим, убирем кирпич
- цепляем к графику скрипт period_converter с значением переменной 5
- дожидаемся появления записи в журнале "Эксперты" о том, что "столько-то записей записано"
- удаляем скрипт
- повторяем 3 последних шага со значениями переменных 15, 30, 60, 240, 1440
- смотрим дату первой котировки на минутном графике
- открываем тестер
- выбираем период М1
- устанавливаем начальной датой время первой минутной котировки
- ставим галочку "переситать"
- жмём старт
- как только начинается само тестирование (на закладке результаты появляются сделки), жмем стоп
- повторяем последние 4 шага для всех периодов (М5, М15, ...)
- при всех последующих тестах следим, чтоб галочка "пересчитать" была снята.
Все результаты будут идентичны ;)
Добрый день. У меня, как и у всех возникли проблемы с минутными котировками. С Альпври перекачал GBPUSD_М1 16.06.2004 09:11 - 08.09.2006 22:59 Формат - MT4 тип Архив ZIP-WinRaR, а как это правильно поместить в МТ не знаю. Если можно опишите пошагово как Вы это делаете, а если надоело, то дайте ссылку, где бы это всё описывалось в подробностях и скриншотами окон. Потому, что на форуме информация разбросана, и не всегда понятна. Должно же быть где то описание на уровне преподования куда бы новичок зашёл, прочитал, и вместо 20-ти вопросов задал бы один, два.
На данный момент у меня есть М1 с 2006.06.15 по 2006.09.08, но на графике М1 и во время тестирования на М1 почему-то работает только с 2006.07.28 по 2006.09.08. Макс. кол-во баров истории 1000000, макс. кол-во баров в окне 32768. Во время теста указываю даты 2006.06.15 по 2006.09.08, результат выдаётся с 2006.07.28 по 2006.09.08.
Почему не работает интервал с 2006.06.15 по 2006.07.28?
Если я правильно понял, то кнопка Home просто подкачивает котировки путём прокрутки графика назад, у меня эту ф-цию выполняет кнопка PageUp.
Далее я сделал всё по Вашим рекомендациям. Действительно, в общем результаты одни и теже. Возникает вопрос: а нужно ли для такого тестирования закачивать таймфреймы большего порядка чем М1?
Казалось бы, закачал М1 за год, использовал скрипт period_converter и перед тобой результат высокого качества, плюс визуализация минутного графика со всеми сделками?
//+------------------------------------------------------------------+
//| SAR Trading v2.mq4 |
//| Copyright © 2005, Cronex. |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Cronex"
#include <stdlib.mqh>
#include <stderror.mqh>
//----
extern double Lots = 0.1;
extern double MaximumLots = 0.5;
extern double TakeProfit = 100;
extern double StopLoss = 15;
extern double TrailingStep = 1;
extern double MaximumRisk = 0.025;
extern double DecreaseFactor = 20;
extern double MAPeriod = 18;
extern double MAShift = 2;
//----
#define MAGICSAR 19680213
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int Buys = 0, Sells = 0;
//----
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false)
break;
//----
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MAGICSAR)
{
if(OrderType() == OP_BUY)
Buys++;
//----
if(OrderType()==OP_SELL)
Sells++;
}
}
//---- return orders volume
if(Buys > 0)
return(Buys);
else
return(-Sells);
}
//+------------------------------------------------------------------+
//| Calculate optimal lot size |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double Lot = Lots;
int orders = HistoryTotal(); // history orders total
int losses = 0; // number of losses orders without a break
//---- select lot size
Lot = NormalizeDouble(AccountFreeMargin()*MaximumRisk / 1000.0, 1);
//---- calcuulate number of losses orders without a break
if(DecreaseFactor > 0)
{
for(int i = orders - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == false)
{
Print("Error in history!");
break;
}
//----
if(OrderSymbol() != Symbol() || OrderType() > OP_SELL)
continue;
//----
if(OrderProfit() > 0)
break;
//----
if(OrderProfit() < 0)
losses++;
}
if(losses > 1)
Lot = NormalizeDouble(Lot - Lot*losses / DecreaseFactor, 1);
}
//---- return lot size
if(Lot < 0.1)
Lot = 0.1;
if(MaximumLots != 0 && Lot > MaximumLots)
Lot = MaximumLots;
return(Lot);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OrderTrailingStop()
{
if(StopLoss > 0)
{
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false)
break;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MAGICSAR)
{
if(OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > Point*(StopLoss + TrailingStep) &&
OrderStopLoss()<Bid-Point*(StopLoss+TrailingStep))
ErrorCheckOut(OrderModify(OrderTicket(), 0, Bid - Point*(StopLoss),
OrderTakeProfit(), 0, Blue));
}
if(OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > Point*(StopLoss+TrailingStep) &&
OrderStopLoss() > Ask + Point*(StopLoss + TrailingStep))
ErrorCheckOut(OrderModify(OrderTicket(), 0, Ask + Point*(StopLoss),
OrderTakeProfit(), 0, Blue));
}
}
}
}
//----
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double SAR,MA;
SAR = iSAR(NULL, 0, 0.02, 0.2, 0);
MA = iMA(NULL, 0, MAPeriod, MAShift, MODE_SMA, PRICE_MEDIAN, 0);
//============================== Покупка ============================
if(SAR < MA || iClose(NULL, 0, MAShift) < MA)
{
ErrorCheckOut(OrderSend(Symbol(), OP_BUY, LotsOptimized(), Ask, 3,
Bid - StopLoss*Point, Ask + TakeProfit*Point, "", MAGICSAR,
0, Lime));
}
//============================== Продажа ============================
else
if(SAR > MA || iClose(NULL, 0, MAShift) > MA)
{
ErrorCheckOut(OrderSend(Symbol(), OP_SELL, LotsOptimized(), Bid, 3,
Ask + StopLoss*Point, Bid - TakeProfit*Point , "",
MAGICSAR, 0, DarkOrange));
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void ErrorCheckOut(bool LastErr)
{
int Error;
if(LastErr != TRUE)
{
Error = GetLastError();
if(Error != 0)
Print("LastError = ",Error," : ",ErrorDescription(Error));
}
}
//+------------------------------------------------------------------+
//| Start of expert |
//+------------------------------------------------------------------+
int start()
{
if(Bars < 100 || IsTradeAllowed() == false)
return;
if(CalculateCurrentOrders(Symbol()) == 0)
CheckForOpen();
else
OrderTrailingStop();
}
//+------------------------------------------------------------------+
Поставьте макс. кол-во баров в окне 1000000 и всё будет нормально и на интервале 2006.06.15 по 2006.07.28
//+------------------------------------------------------------------+
//| SAR Trading v2.mq4 |
//| Copyright © 2005, Cronex. |
//| |
//+------------------------------------------------------------------+
Дорогой ВЮА!
Я бы мог рассказать Вам, как работает приведенный Вами эксперт, но, боюсь, Вам это мало поможет. Вы же не будете каждый раз обращаться за разъяснениями на форум разработчиков языка!
К сожалению, практически нереально использовать эксперта в торговле, если Вы не понимаете его работы. А для этого необходимо хотя бы в минимальном объеме иметь представление об MQL. Вас ведь никто не заставляет писать экспертов самостоятельно, но знать основы языка нужно обязательно.