Вычислите время как переменную времени и используйте его в iBarshift() для получения номера бара, когда у вас есть номер бара, используйте его в Open[] или iOpen().
Вычислите время как переменную времени и используйте его в iBarshift() для получения номера бара, когда у вас есть номер бара, используйте его в Open[] или iOpen().
да, неплохая идея :)
Спасибо, я воспользуюсь этим!
И это возможно сделать:
int Bar; double OpenPrice; int B(k); { switch(HeureSH[k]) { case 0: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("23:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("09:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("15:00")); break; case 3: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("19:00")); break; } } OpenPrice= iOpen(Symbol(), PERIOD_H1, B);
HeureSH - это массив с четырьмя часами.
Потому что если это определенные часы, то столбик должен быть разным, хотя создайте переключатель, чтобы иметь только одну строку, а не четыре разных строки.
Правильно ли это? Правильно ли написан код?
И это возможно сделать:
HeureSH - это массив с четырьмя часами.
Потому что если это определенные часы, то столбик должен быть разным, хотя создайте переключатель, чтобы иметь только одну строку, а не четыре разных строки.
Все правильно? Код написан правильно?
Я предполагаю, что у вас есть ошибка копирования/вставки, так как у вас есть случай 1 дважды ... поэтому я предполагаю, что второй случай 1 должен быть случаем 2.
Чтобы это работало, значения, хранящиеся в массиве HeureSH[], должны быть 1, 2, 3 или 4, это правильно? Это могут быть только значения типа int. никаких строк или двоек. . .
В вашем вызове iOpen() я предполагаю, что B должно быть Bar? Или вы имели в виду B(int)? Если вы хотите использовать функцию в этом вызове, вы должны сделать так, чтобы функция возвращала правильное значение.
Вы окажете большую услугу себе и всем остальным, если будете использовать осмысленные имена переменных и функций. ... B, k и Bar не очень описательны.
Это ошибка от меня, я скопировал свой код, но я не знаю, что я написал........ Я решил эту проблему.
В моем iopen я написал B, который является "Bar", потому что время отличается, поэтому Bar тоже отличается.
Ах да, значения строк будут делать некоторые проблемы, я думаю, что это проблема, так что я попытаюсь изменить.
int B(k); { switch(HeureSH[k]) { case 0: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("23:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("09:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("15:00")); break; case 3: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("19:00")); break; } } OpenPrice= iOpen(Symbol(), PERIOD_H1, B);Это не сработает. 1) iBarShift присвоен Bar , но iOpen использует B. 2) StrToTime("23:00") вернет сегодняшнюю дату в 23:00, которая всегда будет в будущем (или текущем баре H1).
#define HR2400 86400 // 24 * 3600 datetime TimeOfDay(datetime when){ return( when % HR2400 ); } datetime DateOfDay(datetime when){ return( when - TimeOfDay(when) ); } int B(k); { #define HR0900 23400 // 9*3600 #define HR1500 54000 #define HR1900 68400 #define HR2300 59800 int times[]={ HR2300, HR0900, HR1500, HR1900 }; datetime now = TimeCurrent(), Bod = DateOfDay(now), want= Bod + times[HeureSH[k]]; if (want > now){ // Yesterdays? datetime prevTradingDate = iTime(Symbol(), PERIOD_D1, 1); want = prevTradingDate + times[HeureSH[k]]; } int iBar= iBarShift(Symbol(), PERIOD_H1, want); OpenPrice= iOpen(Symbol(), PERIOD_H1, iBar); }
Привет WHRoeder,
Я думаю, что ваш код более эффективен, чем мой, и получает, если значение времени вчера или сегодня. Я согласен: 23:00, с моим кодом, это всегда futur или current, когда уже слишком поздно...
Большое спасибо! Это именно то, что я искал.
Здравствуйте,
для информации:
Вы сказали, что ibarshift был назначен на Bar, iOpen на B. Хорошо.
Но функция B(k), что это за функция? Почему она здесь?
В моем коде, я поместил ее потому, что хотел получить связь между массивом размеров строк времени (HeuresSH) и дифференциалами StrToTime. Это было ложно.
Вы снова его использовали, зачем?
С уважением :)
Да, я забыл сказать, HeureSH[] - это массив, состоящий из четырех различных часов в строковых значениях.
Хорошо, я вставил ваш код в мой советник, и он отлично работает! Я улыбнулся, когда увидел, что советник работает так, как я хотел!!!
Большое спасибо ......
Это на бэктесте, потому что рынок закрыт...
Но есть проблема:
Советник правильно открывает позиции, но покупки никогда не закрываются, а продажи сразу же закрываются при открытии.
Моя стратегия такова:
В одно и то же время, советник должен открыть продажу или покупку, если параметры верны. Не существует SL или TP.
И в то же время, он должен зациклиться и закрыть все сделки, если следующие функции истинны:
if(OrdersTotal()>0) { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber() == MagicSH && OrderOpenTime() > iTime(Symbol(), PERIOD_H1, 1)) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(),LotsSH, ask, 300, CLR_NONE);Я должен добавить фильтр прибыли, но я буду работать над этим. Без этого он должен закрывать Buy, но никогда не закрывается, и он должен позволить sell работать, но sell закрываются немедленно. Есть ли ошибка в последнем коде?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет, ребята,
У меня новый вопрос, простой, я думаю.
Когда, например, наступает 15:00, я хочу узнать цену открытия свечи, которая была в 9:00.
Как написать код для получения цены открытия свечи в заданный час?