Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
..........
ticket=OrderSend(.....);//приказ и запоминаем тикет ордера
if(ticket>0)//открылась
{
//действия с тикетом
}
Точнее будет:
{
//действия с тикетом
}
OrderSend - "Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи. "
Хотя даже в тестере первый тикет номер 1, а не 0.
Точнее будет:
{
//действия с тикетом
}
OrderSend - "Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи. "
Хотя даже в тестере первый тикет номер 1, а не 0.
Так рад видеть пропавшую Оксану ))
Да, тикеты начинаются с 1 в тестере и на серваке ДЦ, но в ДЦ вы 1 никогда не словите. Ваш вариант не совсем рабочий, не корректно сравнивать на неравенство с -1. А если реальный счет вернет 1234567?
{
//действия с тикетом
}
// так верно
Так в тестере тикет меньше одного быть не может, на реале тем более
ноль это меньше единицы, оба условия правильные, только одно на сравнение, другое на исключение.
хотя у себя привык делать так:
int ticketbuy = OrderSend(sy,OP_BUY,ll,MarketInfo(sy,MODE_ASK),Slippage,0,0,Comments,mn,0,BuyColor);
if(ticketbuy<0)
Print(sy," OpenPosition. OrderSend Buy fail #",GetLastError());
else
Print(sy," OpenPosition. OrderSend Buy successfully");
Но и с учетом моего, условия все правильные, только логика разная)
{
bool ret;
int error=0;
double price=0.0;
int total=OrdersTotal();
if(!disabled(_Symbol))
{
Print(rezult);
return;
}
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderType()>1)continue;
if(OrderType()!=type)continue;
int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
if(OrderType()==OP_BUY)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_BID),digits);
if(OrderType()==OP_SELL)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK),digits);
if(NormalizeDouble(NormalizePrice(OrderSymbol(),price),digits)!=price)continue;
ret=OrderClose(OrderTicket(),OrderLots(),price,Slippage,clrLawnGreen);
if(!ret)
{
error=GetLastError();
rezult=StringConcatenate(OrderSymbol(),": error close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType())," №- ",error," ",ErrorDescription(error));
Print(rezult);
}
else
{
rezult=StringConcatenate(OrderSymbol(),": close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType()));
Print(rezult);
}
}
}
Доброго вечера .Всех с наступающим Новым годом ..Подскажите пожалуйста ,что в это куске кода не так ?При закрытии села закрывается и бай .А вот при закрытии бая селл остается ..нужно чтобы при закрытии села бай не закрывался и работал дальше
Советую поменять логику на корню
То есть необходимо вести учет открытых ордеров - сколько открыто селлов, сколько открыто баек
А уже потом исходя из этих соображений управлять ордерами - открывать и закрывать
Всем с наступающим!
прошу помощи, не понимаю почему советник открывает много ордеров, если в условии для открытия не должно быть отложек, а он после открытия опять открывает. подозреваю с циклом не так чтото? не очень понимаю циклы
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
// Теперь открываем ордера
if (Hour()==00 && Minute()==01 && otl_b==0 && otl_s ==0); // Если настало время и нет отложек
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); //ставим отложки
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
Всем с наступающим!
прошу помощи, не понимаю почему советник открывает много ордеров, если в условии для открытия не должно быть отложек, а он после открытия опять открывает. подозреваю с циклом не так чтото? не очень понимаю циклы
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
// Теперь открываем ордера
if (Hour()==00 && Minute()==01 && otl_b==0 && otl_s ==0); // Если настало время и нет отложек
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); //ставим отложки
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
Попробуйте так
sdel_s=0;
otl_b=0;
otl_s=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
}
}
Попробуйте так
sdel_s=0;
otl_b=0;
otl_s=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
}
}
все равно открывает много ордеров
Прриветствую. Всех с НГ!
Бывает при попытке оптимизации какого-либо советника после выполнения результаты и график оптимизации пустые а в журнале запись:
There were 2 passes done during optimization, 2 results have been discarded as insignificant (Были 2 проходит сделано в процессе оптимизации, 2 результаты были отброшены как незначительное) (2 - к примеру)
убрать галку "генетический алгоритм" при этом не помогает. Я понимаю что тестеру таки результаты кажутся незначительными, но как увидеть то что есть? И это при том что советник за период, при тестировании, за тот-же период (год) не сливает а гоняет +/- 20%.