Как сделать, что бы for (i=1; i<StartBar; i++) StartBar был бы бар, на котором был указаный изгиб (extern int b= 2)старшего таймфрейма (extern int = ... ; //W1, MN1)
Как сделать, что бы for (i=1; i<StartBar; i++) StartBar был бы бар, на котором был указаный изгиб (extern int b= 2)старшего таймфрейма (extern int = ... ; //W1, MN1)
Поправка
Совпадение двух вершин указаных ТФ (допустим недельного и месячного)
Вопрос следующего содержания. В книге по MQL4, к-я находится на MQL4.communityв главе "Переменные GlobalVariables" в разделе "Свойства GV-переменных" сказано: "GV-переменная может иметь только тип double". Ниже в разделе "Функция GlobalVariableDel()" приведен пример эксперта globalvar.mq4 следующего содержания:
//--------------------------------------------------------------------// globalvar.mq4// Предназначен для использования в качестве примера в учебнике MQL4.//--------------------------------------------------------------------int Experts; // Колич. экспертовdouble Depo=10000.0, // Заданный депозит
Persent=30, // Заданный процент
Money; // Искомые средстваstring Quantity="GV_Quantity"; // Имя GV-переменной//--------------------------------------------------------------------int init() // Спец. функция init
{
Experts=GlobalVariableGet(Quantity); // Получим тек. знач.
Experts=Experts+1; // Колич. экспертовGlobalVariableSet(Quantity, Experts); // Новое значение
Money=Depo*Persent/100/Experts; // Средства для эксп.Alert("Для эксперта в окне ", Symbol()," выделено ",Money);
return; // Выход из init()
}
//--------------------------------------------------------------------int start() // Спец. функция start
{
int New_Experts= GlobalVariableGet(Quantity);// Новое колич. эксп.if (Experts!=New_Experts) // Если изменилось
{
Experts=New_Experts; // Теперь текущ. такое
Money=Depo*Persent/100/Experts; // Новое знач. средств Alert("Новое значение для эксперта ",Symbol(),": ",Money);
}
/*
...
Здесь долен быть указан основной код эксперта,
в котором используется значение переменной Money
...
*/return; // Выход из start()
}
//--------------------------------------------------------------------int deinit() // Спец. ф-ия deinit
{
if (Experts ==1) // Если эксперт один..GlobalVariableDel(Quantity); //..удаляем GV-переменelse// А иначе..GlobalVariableSet(Quantity, Experts-1); //..уменьшаем на 1Alert("Эксперт выгружен из окна ",Symbol()); // Сообщ. о выгрузкеreturn; // Выход из deinit()
}
//--------------------------------------------------------------------
Вопрос: почему в данном примере GV-переменные Expert и New_Expert имеют тип int, хотя, как указано ранее, эти переменные должны были бы иметь тип double?
В првом цикле пробую наити цену указаного изгиба на старшем ТФ.Цикл до найденого изгиба. Запускаю второй цикл на младшем ТФ, где ищу цену каждого изгиба по барам сколько их есть на графике и сравниваю с ценой найденой в первом цикле. Если нашел такую цену, то возращяю время бара даного изгиба на данном ТФ.
Тоже самое было в 2000 годе, то есть в начале периода тестирования.
Где ошибка. Я програмист слабый. Хочу написать тестовую програмку. Трудно получается. Кого то просить немогу, потому, что она делаеся пошагово в зависимости от полученых данных.
Помогите в этом месте. И еще на прошлой странице просил помощь в написаний функции NewZZ().
Буду благодарен, если кто исправит ошибки и обьяснит их.
datetime GetExtremumZZ_2TF_Bars(string sy="", int tf1=0, int tf2=0, int ne=0, int dp=12, int dv=5, int bs=3)
{
if (sy=="" || sy=="0") sy=Symbol();
double zz1, zz2, p1, p2;
int i, k1=iBars(sy, tf1), ke=0;
int j;
datetime t;
for (i=1; i<k1; i++)
{
zz1=iCustom(sy, tf1, "ZigZag", dp, dv, bs, 0, i);
if (zz1!=0)
{
ke++;
if (ke>ne)
{p1=zz1;datetime t1=iTime(sy,tf1,i);}
}
}
Print(" p1 " ,p1);
Print(" t1 ", TimeToStr(t1, TIME_DATE|TIME_MINUTES));
for (j=1; j<Bars; j++)
{
zz2=iCustom(sy, tf2, "ZigZag", dp, dv, bs, 0, j);
if (zz2!=0)
{
p2=zz2;
Print("p2= ",p2);
t=iTime(sy, tf2, j);
if(p1==p2)
{
Print("skaiciavimo pradzia nuo ",TimeToStr(t, TIME_DATE|TIME_MINUTES));
return(t);
}
}
}
return(0);
}
При тестировании стратегии, после того, как откроется первый ордер, данная функция работает нормально, то есть трейлинг идет и ордер закрывается. Но после открытия вторго ордера при обращении к функции трейлинга возникает ошибка zero divide. Прошу помощи в том, что бы трейлинг работал и для второго ордера, третьего и т.д.
И еще вопрос.
Как сделать, что бы for (i=1; i<StartBar; i++) StartBar был бы бар, на котором был указаный изгиб (extern int b= 2)старшего таймфрейма (extern int = ... ; //W1, MN1)
Найти время бара и пересчитать его в номер бара старшего ТФ
Может код напишишь?
Как сделать, что бы for (i=1; i<StartBar; i++) StartBar был бы бар, на котором был указаный изгиб (extern int b= 2)старшего таймфрейма (extern int = ... ; //W1, MN1)
Поправка
Совпадение двух вершин указаных ТФ (допустим недельного и месячного)
Правильно так будет?
Условие тф1 >тф2
datetime GetExtremumZZ_2TF_Bars(string sy="", int tf1=0, int tf2=0, int ne=0, int dp=12, int dv=5, int bs=3) { if (sy=="" || sy=="0") sy=Symbol(); double zz1, zz2, p1, p2; int i, k1=iBars(sy, tf1), ke=0; int j, k2=iBars(sy, tf2); datetime t; for (i=1; i<k1; i++) { zz1=iCustom(sy, tf1, "ZigZag", dp, dv, bs, 0, i); if (zz1!=0) { ke++; if (ke>ne) {p1=zz1;} } } for (j=1; j<Bars; j++) { zz2=iCustom(sy, tf2, "ZigZag", dp, dv, bs, 0, j); if (zz2!=0) { p2=zz2; t=iTime(sy, tf2, j); if(p1==p2) return(t); } } return(0); }Вопрос следующего содержания. В книге по MQL4, к-я находится на MQL4.community в главе "Переменные GlobalVariables" в разделе "Свойства GV-переменных" сказано: "GV-переменная может иметь только тип double". Ниже в разделе "Функция GlobalVariableDel()" приведен пример эксперта globalvar.mq4 следующего содержания:
Вопрос: почему в данном примере GV-переменные Expert и New_Expert имеют тип int, хотя, как указано ранее, эти переменные должны были бы иметь тип double?
Заранее благодарю за ответ
Правильно так будет?
Условие тф1 >тф2
Что то не так.
В првом цикле пробую наити цену указаного изгиба на старшем ТФ.Цикл до найденого изгиба. Запускаю второй цикл на младшем ТФ, где ищу цену каждого изгиба по барам сколько их есть на графике и сравниваю с ценой найденой в первом цикле. Если нашел такую цену, то возращяю время бара даного изгиба на данном ТФ.
Запустил с 2000,01,01 на тестере.
Что в журнале
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1688
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2495
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1192
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2315
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1069
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3161
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2351
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.4535
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.338
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.4249
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.416
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2596
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3353
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2658
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3138
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0344
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1537
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0608
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1216
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.079
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2401
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0104
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0917
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 0.8227
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 0.9596
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: t1 1992.09.01 00:00
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p1 1.4104
Тоже самое было в 2000 годе, то есть в начале периода тестирования.
Где ошибка. Я програмист слабый. Хочу написать тестовую програмку. Трудно получается. Кого то просить немогу, потому, что она делаеся пошагово в зависимости от полученых данных.
Помогите в этом месте. И еще на прошлой странице просил помощь в написаний функции NewZZ().
Буду благодарен, если кто исправит ошибки и обьяснит их.
Что то не так.
Помогите слабому.
Добрый день. На сайте нашел функцию трейлинга:
for(i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
if(OrderType()==OP_BUY)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop_)
{
if(OrderStopLoss()<Bid-Point*TrailingStop_)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop_,OrderTakeProfit(),0,Green);
return(0);
}
}
}
if(OrderType()==OP_SELL)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop_))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop_)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop_,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
При тестировании стратегии, после того, как откроется первый ордер, данная функция работает нормально, то есть трейлинг идет и ордер закрывается. Но после открытия вторго ордера при обращении к функции трейлинга возникает ошибка zero divide. Прошу помощи в том, что бы трейлинг работал и для второго ордера, третьего и т.д.