В МТ5 все по-другому. А в 4-ке функцию слип применять с осторожностью.
Kiman отпиши о результате своего эксперимента, а то билды обновляются, уже 950 пришёл, может и поменялось чего...
Изменено 10 января, 2016 пользователем 0ll
От xbms, 13 апреля, 2013 в Уголок Программиста
В МТ5 все по-другому. А в 4-ке функцию слип применять с осторожностью.
Kiman отпиши о результате своего эксперимента, а то билды обновляются, уже 950 пришёл, может и поменялось чего...
Изменено 10 января, 2016 пользователем 0ll
В МТ5 все по-другому. А в 4-ке функцию слип применять с осторожностью.
Kiman отпиши о результате своего эксперимента, а то билды обновляются, уже 950 пришёл, может и поменялось чего...
Всем профита <:-p envelopes>
В МТ5 все по-другому. А в 4-ке функцию слип применять с осторожностью.
Kiman отпиши о результате своего эксперимента, а то билды обновляются, уже 950 пришёл, может и поменялось чего...
Kiman спасибо. Вы сделали через эксперт или скрипт? Просто скрипт выполняется в другом потоке и на эксперт влиять не будет...
Кстати можно попробовать выключать, а потом снова включать разрешение на автоторговлю.
Сейчас глянул - отключить можно, а включить проблема - надо внешнюю библиотеку делать.
Сейчас глянул - отключить можно, а включить проблема - надо внешнюю библиотеку делать.
Изменено 11 января, 2016 пользователем Kiman
отложки стоповые или лимитные?
Пробовал, не подходит...
отложки стоповые или лимитные?
Слип и таймеры на истории не работают - не зачем. просто тестер пропускает котировки и всё.
Доброго времени суток.
Написал свой первый советник: открытие ордеров по полосам Боллинджера, при цене выше средней на покупку, при цене ниже средней на продажу. Профит ставлю на удвоенном расстоянии от средней линии индикатора до верхней или нижней. Стопы соответственно на верхней или нижней линиях.
Но есть несколько вопросов, подскажите пожалуйста:
1. Как ограничить советник на открытие ордеров после закрытия по профиту. А так получается, что например: ордер на покупку закрылся по профиту, цена еще выше средней и сразу отрывается еще один ордер на покупку.
2. При тестере стратегии, ордера на продажу открывается два одновременно. При этом ограничение в советнике стоит только на один ордер. А вот ордера на покупку открываются правильно, по-одному. Разницы в написании подсчета количества ордеров нет.
Вот скрипт советника:
void OnTick()
{
PriceMiddle = iCustom (Symbol(), 0, "Bands", InpBandsPeriod, InpBandsShift, InpBandsDeviations, 0, 0);
PriceHigh = iCustom (Symbol(), 0, "Bands", InpBandsPeriod, InpBandsShift, InpBandsDeviations, 1, 0);
PriceLow = iCustom (Symbol(), 0, "Bands", InpBandsPeriod, InpBandsShift, InpBandsDeviations, 2, 0);
if(Bid {
SL = PriceHigh;
TP = PriceLow - (PriceMiddle - PriceLow);
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,comment,Magic,0,Red);
if(ticket > 0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true)
{
if(OrderModify(ticket,OrderOpenPrice(),SL,TP,0) == true)
Print("Ордер успешно изменился");
if(OrderClose(ticket, OrderLots(),TP, Slippage, Black) == true)
Print("Ордер успешно закрылся");
if(OrderClose(ticket, OrderLots(),SL, Slippage, Black) == true)
Print("Ордер отрицательно закрылся");
}
}
}
if(Ask > PriceMiddle && CountBuy() == 0)
{
SL = PriceLow;
TP = PriceHigh + (PriceHigh - PriceMiddle);
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,comment,Magic,0,Blue);
if(ticket > 0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
{
if(OrderModify(ticket,OrderOpenPrice(),SL,TP,0) == true)
Print("Ордер успешно изменился");
if(OrderClose(ticket, OrderLots(),TP, Slippage, Black) == true)
Print("Ордер успешно закрылся");
if(OrderClose(ticket, OrderLots(),SL, Slippage, Black) == true)
Print("Ордер отрицательно закрылся");
}
}
}
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for(int i = OrdersTotal()-1;i>=1;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber() == Magic && OrderSymbol() == Symbol() && OrderType() == OP_SELL)
count++;
}
return(count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
int count = 0;
for(int i = OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber() == Magic && OrderSymbol() == Symbol() && OrderType() == OP_BUY)
count++;
}
return(count);
}
//+------------------------------------------------------------------+
Изменено 13 января, 2016 пользователем Pavel888
С разрешения опытных коллег я отвечу. Htp87, по вопросу #1 можно проверять по последнему ордеру в истории - по его профиту, а если у тебя больше нет никаких условий и ордера просто по пересечению боллинджера, то можно и по типу ордера - если был бай, больше в бай не открывать. Вопрос #2, я удивлён вообще, о каком тестировании ты говоришь, кинь советника на реальный график, увидишь кучу ерроров. Я своим неопытным взглядом вижу - неправильно используешь функцию ордер клозе - это выглядит, как будто ты сам пытаешься закрыть свой ордер по тейк профиту, а затем по стоп-лоссу. Плюс I-custom лучше бери по 1-му бару а не нулевому, так как он не сформирован до конца и цена будет прыгать вокруг линии боллинджера, тем самым давая повод каждый раз открывать сделки
Большое спасибо за ответы.
А как тогда прописать: по типу ордера - если был бай, больше в бай не открывать?
ЦитатаА как тогда прописать: по типу ордера - если был бай, больше в бай не открывать?
Чёрд, никак не найду в инете пример программы с вызовом ZigZag. Может кто-нибудь кинуть ссылку на такой пример, где бы, например, рассчитывалось значение ZigZag для ряда свечей?
Чёрд, никак не найду в инете пример программы с вызовом ZigZag. Может кто-нибудь кинуть ссылку на такой пример, где бы, например, рассчитывалось значение ZigZag для ряда свечей?
Изменено 20 августа, 2017 пользователем Pavel888
Здравствуйте! Друзья, помогите советом: ситуация в том, что при перезагрузке сервера обнуляются две переменные, которым присволись значения в процессе работы советника из-за этого при повторном запуске терминала советник, если есть открытые ордера, работает не по алгоритму... Как при перезагрузке сервера сохранить значения переменных, если есть открытые ранее ордера?
Зиг-заг не рассчитывается (у него нет формулы), он ищет в цикле вершины. Как пользоваться индюком (0-буфером) показал dermitay.
Может кто-нибудь кинуть ссылку на такой пример, где бы, например, рассчитывалось значение ZigZag для ряда свечей?
Sany2912 тут много подходов - выбирай на вкус:
- в ОнИнит пересчитывать все необходимые для продолжения торговли значения (имхо лучший)
- писать в переменную уровня терминала, они сохраняются (сам не проверял)
- писать значения во внешний файл, а в ОнИнит - читать.
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем