OrdersTotal возвращает 0
#include <Trade\Trade.mqh>
CTrade trade;
int gi_flag=1;
void OnTick()
{
if(gi_flag==1)
{
trade.PositionOpen(_Symbol,ORDER_TYPE_SELL,1, SymbolInfoDouble(_Symbol,ORDER_TYPE_SELL==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK),0,0);
gi_flag=0;
}
PrintFormat(DoubleToString(OrdersTotal(),1));
}
Хотя как я понимаю должен вернуть 1, или я не правильно понимаю?
Ордера - это не позиции. Ордер - это еще не исполненный приказ на открытие позиции, позиция - результат выполнения ордера.
Спасибо, понятно, значит будем пользоваться функцией PositionsTotal.
А что с первой проблемой?
Написал такой код происходит что-то не понятное где может быть ошибка
string Data() { string vr; string den; datetime date=TimeCurrent(); MqlDateTime str; TimeToStruct(date,str); switch(str.day_of_week) { case 0: den = "Воскресенье"; case 1: den = "Понедельник"; case 2: den = "Вторник"; case 3: den = "Среда"; case 4: den = "Четверг"; case 5: den = "Пятница"; case 6: den = "Суббота"; } printf("%02d.%02d.%4d %02d:%02d:%02d %d",str.day,str.mon,str.year,str.hour,str.min,str.sec,str.day_of_week); printf("%02d.%02d.%4d %02d:%02d:%02d %s",str.day,str.mon,str.year,str.hour,str.min,str.sec,den); return(StringFormat("%02d.%02d.%4d %02d:%02d:%02d %s",str.day,str.mon,str.year,str.hour,str.min,str.sec,den)); }
в лог печатает такие результаты
MF 0 11:06:34 04.06.2010 09:06:43 5RN 0 11:06:34 04.06.2010 09:06:43 Суббота
на сколько я знаю 5 день это пятница.
Написал такой код происходит что-то не понятное где может быть ошибка
в лог печатает такие результаты
MF 0 11:06:34 04.06.2010 09:06:43 5RN 0 11:06:34 04.06.2010 09:06:43 Суббота
на сколько я знаю 5 день это пятница.
При любом значении day_of_week Вы будете получать значение "Суббота". Потому что отсутствуют операторы break между case
Еще 2 непонятных момента
void OnTick()
{
for(int li=1; li<2; li++)
{
PrintFormat(SymbolName(li,true));
}
}
Возвращает пустоту или пробел, но не название символа
void OnTick()
{
PrintFormat(DoubleToString(SymbolsTotal(true),1));
}
Возвращает 1 хотя у меня открыто не меньше 10
Но если поставить не true а false, то все вроде работает нормально
Возвращает пустоту или пробел, но не название символа
for(int li=0; li<SymbolsTotal(false); li++) { PrintFormat(SymbolName(li,false)); }Так наверно будет правильней, если нужно перебрать все что есть в ДЦ. если только то что в терминале в таблице, то меняем false на true.
Так про то и речь, что с true не работает!
Так про то и речь, что с true не работает!
Это работает, проверено на трех ДЦ (перебор всех инструментов которые торгуются в ДЦ)
for(int li=0; li<SymbolsTotal(false); li++) { PrintFormat(SymbolName(li,false)); }
А вот этот код переберет все что в окне "Обзор рынка" выбрано
for(int li=0; li<SymbolsTotal(true); li++) { PrintFormat(SymbolName(li,true)); }
Только я тут вот что не пойму. Зачем такой перебор делать в OnTick().
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Запускаем тестер на паре EURUSD, все работает, оба ордера отправляются. Если раскомментировать строчку, то ордер по GBPUSD не открывается и в логе ошибка:
2010.06.02 10:34:26 Core 1 failed instant sell 1.00 GBPUSD at 0.00000 [Invalid stops]
2010.06.02 10:34:26 Core 1 No prices for symbol GBPUSD
Попробовал через SymbolInfoTick, тоже самое.
И не подскажете как правильнее через SymbolInfoTick или SymbolInfoDouble?