Господа программисты, нужна ваша помощь.

 

Добрый день, подскажите, как реализовать следующее:

Как мне узнать – сколько советник будет делать прибыльных сделок подряд за 4 часа при прогоне?

Сразу поясню, что мне нужно, чтобы советник совершал прибыльные сделки подряд именно за 4 часа. Если он совершит 2 прибыльных сделки до 4-х часового времени, потом 3 прибыльных сделки в течение этого 4-х часового времени и потом еще 1 сделку после этого 4-х часового времени, то тестер выдаст мне что подряд прибыльных сделок – 6. А мне нужно что бы он показал сколько прибыльных сделок подряд именно в течении этих 4-х часов.

Что подскажите?

 
Запихни цикл проверки истории в цикл четырехчасовых баров.
 
Можете изложить пример такого кода? а то совсем не могу понять, как такое сделать?
 
...
datetime startdiap,enddiap;
for(int i =10;i>0;i--)
{
startdiap=iTime(Symbol(),Period_H4,i);
enddiap=iTime(Symbol(),Period_H4,i-1);
int countprof;
for(int y=0;y<OrdersHistoryTotal(),y++)
{
OrderSelect(y,SLECT_BY_POS,OrdersHistoryTotal());
if(OrderCloseTime()<startdiap||OrderCloseTime>enddiap)continue;
if(OrderProfit()>0)countprof++; else counprof=0;
...
 

Пожалуйста помогите добавить в скрипт дополнительные волны W X Y пытался просто их вставить но толку ноль он графике их нет.Вот скрипт

//+------------------------------------------------------------------+
//| ShowNames.mq4 |
//| Copyright © 2007, Troshenkin Andrey. |
//| troshenkin@bk.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, Troshenkin Andrey."
#property link "troshenkin@bk.ru"

//+------------------------------------------------------------------+
//| Описание |
//+------------------------------------------------------------------+
// Скрипт предназначен для нанесения названий волн.
// Он при первом вызове показывает перечень букв вверху-посередине графика,
// а при повторном вызове - скрывает их, чтобы они дальше не мешались.
//
// Сам процесс выглядит следующим образом: я отображаю буквы (вызываю скрипт),
// выделяю одну из букв + нажимаю Ctrl и не отпуска клавиши тащу букву
// мышкой на свое место - при этом она копируется.
// После скрываю буквы (вызываю скрипт второй раз) - чтоб не мешались.
// Буквы отображаются цветом в соответствии с текущим TF, само собой,
// вновь созданным буквам можно менять цвет с помощью скриптов ColorM1.mq4 и т.д.
//
// Настройки в #include <TFColorConfig.mqh>
// double LETTERS_WINDOW_LENGTH = 0.4; //какую часть экрана должны занимать буквы (от 0.1 до 1 от ширины графика, где 1 - это вся ширина графика)
// string LETTERS[] = {"A", "B", "C", "a(C)", "b(C)", "c(C)", "1", "2", "3", "4", "5", "ФЗР"};
// string LETTERS_FONTFACE = "Arial";
// int FONT_SIZE1 = 10;
//
//+------------------------------------------------------------------+


#include <TFColor.mqh>

//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
double nTopHeight = 0;
datetime nNextXPos;
int i, nFirstBar;
string arLetters[];
int nSize = LETTERS(arLetters);
bool bIsLettersShown = false;
string sFirstLetter;
int nWindowSize[2];
int nOneLetterBarLength;
double nLettersLength = LETTERS_WINDOW_LENGTH();


if (nSize == 0)
return;

if (!GetStartEndBars(nWindowSize))
return (-1);

if ( (LETTERS_WINDOW_LENGTH() > 1) || (LETTERS_WINDOW_LENGTH() <=0))
{
Alert("Ширина букв должна быть в пределах 0.1 - 1 от ширины экрана.");
return (-1);
}

nOneLetterBarLength = NormalizeDouble((WindowBarsPerChart()*LETTERS_WINDOW_LENGTH())/nSize, 0);
PrintD(WindowBarsPerChart() + " " + nSize + " " + nOneLetterBarLength);

if (nOneLetterBarLength < 1)
nOneLetterBarLength = 1;

//находим первый бар
nFirstBar = nWindowSize[1] - ((WindowBarsPerChart() - (nSize-1)*nOneLetterBarLength)/2);
//если не врежиме тестирования смещаем буквы немного вправо, чтобы ближе к цене были
if (!IsTestingMode())
nFirstBar = nFirstBar - (WindowBarsPerChart() - nSize*nOneLetterBarLength)/6;

nTopHeight = WindowPriceMax() - (WindowPriceMax() - WindowPriceMin())/50;

//определяем есть ли на графике первая буква из массива
sFirstLetter = LETTERS_NAME() + arLetters[0];
if (ObjectFind(sFirstLetter) == 0)
bIsLettersShown = IsObjectVisible(sFirstLetter);

if (!bIsLettersShown)
{
nNextXPos = Time[nFirstBar];

for(i = 0; i < nSize; i++)
{
CreateText( LETTERS_NAME() + arLetters[i], nNextXPos, nTopHeight, arLetters[i] );
nFirstBar = nFirstBar - nOneLetterBarLength;
if (nFirstBar >= 0)
nNextXPos = Time[nFirstBar];
else
nNextXPos = nNextXPos + nOneLetterBarLength*Period()*60;
}
}
else
{
for(i = 0; i < nSize; i++)
ObjectDelete(LETTERS_NAME() + arLetters[i]);
}

WindowRedraw();

return(0);
}

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

void CreateText( string sName, datetime t1, double p1, string sLetter )
{
ObjectDelete(sName);

if ( ObjectCreate(sName, OBJ_TEXT, 0, t1, p1) )
{
ObjectSetText(sName, sLetter, FONT_SIZE1(), LETTERS_FONTFACE(), GetColorByTF(Period()));
ObjectSet(sName, OBJPROP_BACK, true);
}

GetLastError();
}