[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 214

 

Добрый день. Написал функцию, которая должна возвращать количество баров, когда был открыт ордер:

int BarLastOpenPose()
{
datetime t;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderOpenPrice()) t=OrderOpenPrice();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

Однако она возвращает всегда -1. В чем я ошибся? Заранее спасибо.

 
first_may:

Добрый день. Написал функцию, которая должна возвращать количество баров, когда был открыт ордер:

int BarLastOpenPose()
{
datetime t;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderOpenPrice()) t=OrderOpenPrice();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

Однако она возвращает всегда -1. В чем я ошибся? Заранее спасибо.

Может, так:

return (iBarShift(Symbol(),Period(),t)); то есть без true.

 
first_may:

Добрый день. Написал функцию, которая должна возвращать количество баров, когда был открыт ордер:

int BarLastOpenPose()
{
datetime t;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderOpenPrice()) t=OrderOpenPrice();
}
}

return (iBarShift(Symbol(),Period(),t,true));
}

Однако она возвращает всегда -1. В чем я ошибся? Заранее спасибо.

Переменной t присваивается цена открытия, хотя объявлена она как целое

 
Vinin:

Переменной t присваивается цена открытия, хотя объявлена она как целое

Точно, хотел написать OrderOpenTime(), а написал OrderOpenPrice();
 
Спасибо, понял свою ошибку.
 

Как описать такое условие?



avatar
13
4absinth 25.09.2011 19:23

Подскажите, пожалуйста.

Если экстремум (к примеру хай) первого 5-минутного бара текущего дня совпадает с экстремумом текущего дня (на дневке), тогда что-то делаем. Как такое описать?


Roger 25.09.2011 20:25правка | удалить
if(MathAbs(High[1]-iHigh(NULL,PERIOD_D1,0))<Point)
 

помогите люди добрые!!!


avatar
1
droopy 25.09.2011 19:34

Здравствуйте, уважаемые пользователи ресурса!

Помогите пожалуйста, кто сталкивался с чтением/запись вещественного числа в файл.

Задача - считать из файла баланс, если текущий баланс больше - перезаписать файл.

Проблема - то что всегда выводит 0 (ноль)

С записью/чтением целых чисел таких проблем не обнаружил.

Вот код:

double balance;

int file_handle_bala;

file_handle_bala=FileOpen("file_bala.dat",FILE_BIN|FILE_READ);
//-копирование позиции, в случае пустого файла - позиция = 0
if (FileSize(file_handle_bala)>0)
{
balance=FileReadDouble(file_handle_bala,DOUBLE_VALUE);
Alert(balance); ------------------------------------- вот здесь то и идут нули хотя должен написать сохраненный до этого баланс
FileClose(file_handle_bala);
if (AccountBalance()>balance) ------------------------------------ и это правило почему то не срабатывает, потому что алерт ниже - ничего не выводит
{
file_handle_bala=FileOpen("file_bala.dat",FILE_BIN|FILE_WRITE);
balance=AccountBalance();
Alert(balance);
FileWriteInteger(file_handle_bala,balance,DOUBLE_VALUE);
FileClose(file_handle_bala);
}
}
else // если файл оказался пустым
{
FileClose(file_handle_bala); // сначало закроем открытый файл
file_handle_bala=FileOpen("file_bala.dat",FILE_BIN|FILE_WRITE); //откроем для записи
balance=AccountBalance();
FileWriteDouble(file_handle_bala,balance,DOUBLE_VALUE);
FileClose(file_handle_bala);
}

За ранее всем огромное спасибо!!!


avatar
2222
Roger 25.09.2011 20:22

Обратите внимание на эту строку

FileWriteInteger(file_handle_bala,balance,DOUBLE_VALUE);


3461
Zhunko 25.09.2011 20:27

1. Надо бы поуважительнее и подружественнее код публиковать.

2. Пытаетесь записать целое число 8 байт. В MQL4 нет такого типа данных.

 

\Что я сделал не так? Почему столько ошибок? (Нужно узнать максимальное значение индикатора за последние 10 баров). заранее благодарен.

 

Всем доброго времени суток!

Пишу своего первого бота, а заодно знакомлюсь с языком MQL. При тестировании возникла следующая проблема:

Ордер OP_BUYSTOP сразу после выставления срабатывает, хотя судя по графику цена не достигает планового значения (см. ниже)

ВремяТипОрдерОбъёмЦенаS / LT / PПрибыльБаланс
12011.09.19 02:10buy stop10.0176.93576.73577.135
22011.09.19 02:10buy10.0176.93576.73577.135

USDJPY,M5 (visual)

Date 2011.09.19

Time 02:15

Open 76.903

High 76.909

Low 76.890

Close 76.890

Volume 66

Тестирую все тики.

Быть может я не верно воспринимаю ордер OP_BUYSTOP? Покупать, если цена превысит определенное значение, правильно?

Кусок исходного кода, выставляющий ордер

int ticket=OrderSend(Symb, OP_BUYSTOP, Lot, Price, 0, SL, TP);

Заранее всем большое спасибо!

 
Shniperson:

\Что я сделал не так? Почему столько ошибок? (Нужно узнать максимальное значение индикатора за последние 10 баров). заранее благодарен.

Вы объявляете функцию Hi:

double Hi(int pos=0)
внутри функции start()
Причина обращения: