Информация

Все разделы форума доступны для просмотра всем желающим, без регистрации. Если вы хотите оставлять комментарии на форуме, вам необходимо создать учетную запись или авторизоваться.

Close
Авторизация
rus22ru offline
#231
19 авг 2013, 20:27
Аватар пользователя
Сообщений: 1131
Поблагодарили: 263 раз(а) в 202 сообщениях
Зарегистрирован: 28 фев 2012, 14:25
Откуда: Барнаул
РУСЯ-ЖУК
#232
20 авг 2013, 08:38
Аватар пользователя
Сообщений: 463
Поблагодарили: 28 раз(а) в 23 сообщениях
Зарегистрирован: 26 апр 2011, 13:56
Откуда: Барнаул
Задача такая: делаю советник для D1. При выполнении ряда условий он должен открывать ордер в 00:00 по серверу. Если в течение суток ордер не закрылся по стоп-приказам, советник должен его закрыть в 00:00 следующего дня. Перепробовал много вариантов (это не все!), и бесполезно:

OrderSelect(0, SELECT_BY_POS);
if (
//OrderOpenTime()<iTime("EURUSD", 1440, 0)//поздно закрывает
//iTime("EURUSD", 1440, 1)<iTime("EURUSD", 1440, 0)//сразу закрывает
//iTime("EURUSD", 1440, 0)-iTime("EURUSD", 1440, 1)>=86400//сразу закрывает
//iTime("EURUSD", 1440, 0)-OrderOpenTime()>=86400//поздно закрывает
//OrderOpenTime()+86400<=TimeCurrent()//поздно закрывает
//OrderOpenTime()+86400<TimeCurrent()//поздно закрывает
//OrderOpenTime()/86400<TimeCurrent()/86400//поздно закрывает
//OrderOpenTime()/86400+1<=TimeCurrent()/86400//поздно закрывает
)

int Ticket = OrderTicket();
OrderClose (Ticket, Лот, Bid, 3);

С работой на часовке, когда надо было закрывать через 3 часа, было понятно, как сделать.

Или я чего-то не понимаю, или тестер косячит. Помогите, кто может.
4x_trader offline
#233
20 авг 2013, 10:41
Аватар пользователя
Сообщений: 3759
Поблагодарили: 589 раз(а) в 421 сообщениях
Зарегистрирован: 12 окт 2010, 13:50
Вложения
e-OpenByTime.mq4
(16.88 KiB) Скачиваний: 7
e-CloseByTime.mq4
(23.81 KiB) Скачиваний: 6
----------------------------------------------------------------------------------------------
Собаки лают, караван идёт. Основы Price Action Изображение
4x_trader offline
#234
20 авг 2013, 10:48
Аватар пользователя
Сообщений: 3759
Поблагодарили: 589 раз(а) в 421 сообщениях
Зарегистрирован: 12 окт 2010, 13:50
----------------------------------------------------------------------------------------------
Собаки лают, караван идёт. Основы Price Action Изображение
#235
20 авг 2013, 11:04
Аватар пользователя
Сообщений: 463
Поблагодарили: 28 раз(а) в 23 сообщениях
Зарегистрирован: 26 апр 2011, 13:56
Откуда: Барнаул
#236
23 авг 2013, 09:39
Аватар пользователя
Сообщений: 463
Поблагодарили: 28 раз(а) в 23 сообщениях
Зарегистрирован: 26 апр 2011, 13:56
Откуда: Барнаул
Получилось сделать вариант, закрывающий позы через 23 часа, тестировал на Н1 по ценам открытия. Но правильно работает только для лонгов. Вот набросок советника:

extern bool Бай = 1;
extern double Лот = 0.01;

extern double Истор_СЛ = 70;
extern double Истор_ТП = 79;
extern double КСЛ = 1.72;
extern double КТП = 1.86;
extern double dK = 43;
extern double S = 10;

int start()
{
if
(
Бай == 1
&& StrToTime("00:00")/60 <= TimeCurrent()/60
&& StrToTime("00:10")/60 > TimeCurrent()/60
&& iClose("EURUSD", 1440, 1) < iOpen("EURUSD", 1440, 1)// вчерашняя дневка медвежья?
)

double K = iStochastic("EURUSD", 1440, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 1);
double D = iStochastic("EURUSD", 1440, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);
double KD = K / D;

if
(
K > D
&& MathAbs(K - dK) > S
)

double СЛ = (iOpen("EURUSD", 1440, 1) - iLow("EURUSD", 1440, 1) + Истор_СЛ * Point)/2 * КСЛ / KD;
double ТП = (iHigh("EURUSD", 1440, 1) - iClose("EURUSD", 1440, 1) + Истор_ТП * Point)/2 * КТП * KD;

OrderSend("EURUSD", OP_BUY, Лот, Ask, 3, Ask - СЛ, Ask + ТП, "EURUSD~B23", 555, 0);// если условия истинны, то открывем ордер

if
(
StrToTime("23:00")/60<=TimeCurrent()/60
&&StrToTime("23:10")/60>TimeCurrent()/60
)
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
int Ticket = OrderTicket();
OrderClose (Ticket, Лот, Bid, 3);

}
return(0);
Последний раз редактировалось Евгений Субботин 23 авг 2013, 10:05, всего редактировалось 1 раз.
#237
23 авг 2013, 09:49
Аватар пользователя
Сообщений: 463
Поблагодарили: 28 раз(а) в 23 сообщениях
Зарегистрирован: 26 апр 2011, 13:56
Откуда: Барнаул
Но точно такой же, только зеркально обратный советник для шортов, никак не хочет вовремя закрывать ордера. Что только не делал, осталось "фары протереть")) Может кто-то подскажет по коду? Вот его код:

extern bool Селл = 1;
extern double Лот = 0.01;
extern double Истор_СЛ = 67;
extern double Истор_ТП = 75;
extern double КСЛ = 1.33;
extern double КТП = 2.02;
extern double dK = 80;
extern double S = 10;

int start()
{
if
(
Селл == 1
&& StrToTime("00:00")/60 <= TimeCurrent()/60
&& StrToTime("00:10")/60 > TimeCurrent()/60
&& iClose("EURUSD", 1440, 1) > iOpen("EURUSD", 1440, 1)// вчерашняя дневка бычья?
)

double K = iStochastic("EURUSD", 1440, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 1);
double D = iStochastic("EURUSD", 1440, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);
double KD = K / D;

if
(
K < D
&& MathAbs(K - dK) > S
)

double СЛ = (iHigh("EURUSD", 1440, 1) - iOpen("EURUSD", 1440, 1) + Истор_СЛ * Point)/2 * КСЛ / KD;
double ТП = (iClose("EURUSD", 1440, 1) - iLow("EURUSD", 1440, 1) + Истор_ТП * Point)/2 * КТП * KD;

OrderSend("EURUSD", OP_SELL, Лот, Bid, 3, Bid + СЛ, Bid - ТП, "EURUSD~S23", 555, 0);// если условия истинны, то открывем ордер

if
(
StrToTime("23:00")/60<=TimeCurrent()/60
&&StrToTime("23:10")/60>TimeCurrent()/60
)
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);

int Ticket = OrderTicket();
OrderClose (Ticket, Лот, Ask, 3);

}
return(0);
Последний раз редактировалось Евгений Субботин 23 авг 2013, 10:07, всего редактировалось 1 раз.
#238
23 авг 2013, 09:57
Аватар пользователя
Сообщений: 463
Поблагодарили: 28 раз(а) в 23 сообщениях
Зарегистрирован: 26 апр 2011, 13:56
Откуда: Барнаул
Обнаружил, правда, проблемное место (расчет стохастика и переменной KD). Еще K и D сделал глобальными. Если сделать так, то закрывает вовремя, но дальше этого дело не идет.
Извините, что гружу, может простыми вопросами, но только учусь))

Промежуточный рабочий:
красное - удалено,
зеленое - добавлено.
extern bool Селл = 1;
extern double Лот = 0.01;
extern double Истор_СЛ = 67;
extern double Истор_ТП = 75;
extern double КСЛ = 1.33;
extern double КТП = 2.02;
extern double dK = 80;
extern double S = 10;
double K = 100;
double D = 200;


int start()
{
if
(
Селл == 1
&& StrToTime("00:00")/60 <= TimeCurrent()/60
&& StrToTime("00:10")/60 > TimeCurrent()/60
&& iClose("EURUSD", 1440, 1) > iOpen("EURUSD", 1440, 1)// вчерашняя дневка бычья?
)

/*double K = iStochastic("EURUSD", 1440, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 1);
double D = iStochastic("EURUSD", 1440, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);
double KD = K / D;
*/


if
(
K < D
&& MathAbs(K - dK) > S
)

double СЛ = (iHigh("EURUSD", 1440, 1) - iOpen("EURUSD", 1440, 1) + Истор_СЛ * Point)/2 * КСЛ / 1;
double ТП = (iClose("EURUSD", 1440, 1) - iLow("EURUSD", 1440, 1) + Истор_ТП * Point)/2 * КТП * 1;

OrderSend("EURUSD", OP_SELL, Лот, Bid, 3, Bid + СЛ, Bid - ТП, "EURUSD~S23", 555, 0);// если условия истинны, то открывем ордер

if
(
StrToTime("23:00")/60<=TimeCurrent()/60
&&StrToTime("23:10")/60>TimeCurrent()/60
)
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
int Ticket = OrderTicket();
OrderClose (Ticket, Лот, Ask, 3);
}
return(0);
WWolf offline
#239
23 авг 2013, 11:58
Аватар пользователя
Сообщений: 16822
Поблагодарили: 970 раз(а) в 816 сообщениях
Зарегистрирован: 14 окт 2011, 16:30
Откуда: Краснодар
Быть в меньшинстве – самое обычное дело для любого мыслящего человека
TrueTrail v1.6
#240
23 авг 2013, 17:32
Аватар пользователя
Сообщений: 463
Поблагодарили: 28 раз(а) в 23 сообщениях
Зарегистрирован: 26 апр 2011, 13:56
Откуда: Барнаул
Всё, решил эту " загадку":D Оказывается, не люблю ставит фигурные скобки, в теле условного оператора, если в нем больше одной команды.
Так правильно:
if (
StrToTime("23:00")/60<=TimeCurrent()/60
&&StrToTime("23:10")/60>TimeCurrent()/60
)
{
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
int Ticket = OrderTicket();
OrderClose (Ticket, Лот, Ask, 3);
}

А так неправильно:
if (
StrToTime("23:00")/60<=TimeCurrent()/60
&&StrToTime("23:10")/60>TimeCurrent()/60
)
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
int Ticket = OrderTicket();
OrderClose (Ticket, Лот, Ask, 3);

BBCode ВЫКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ

   

Если Вы не хотите добавлять вложения, оставьте поля пустыми.

Пред.След.

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Список форумов

Часовой пояс: UTC + 4 часа (Russia: MSK) по летнему времени Удалить cookies форума

В вашем браузере отключена поддержка cookie. При отключенной поддержке cookie в браузере у вас могут возникнуть проблемы с отображением Личного кабинета. Как включить (активировать) поддержку cookie.