Открытие файла
function Make_Order(TransactionOper)
{
local data, fh;
fh = fopen("C:\\Quick\\file.TXT","w");
if (fh)
{
data = "X"+TransactionOper;
fputs(data,fh);
fclose(fh);
}
else
{
printf("Error opening file");
}
return;
}
Может, у меня глаз замылился, но я никакого криминала здесь не наблюдаю. Однако в моменты подачи сигналов вылазит "Error opening file". Странно, что один раз это сработало и файл создался, а в последующие разы - никак.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Опцию поставил, ничего нигде не вылезло и не изменилось. Эта опция какие ошибки ловит?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Еще заметил такую штуку. Я сделал вывод Close в область сообщений. Так вот, если ткнуть мышкой на чарте в какой-нибудь бар, то выдается сообщение с Close этого бара. Т.е. скрипт в этот момент выполняется "на этом баре". Меня это немного смущает - на самом последнем-то баре скрипт продолжает выполняться или как? Не хотелось бы "попасть" на то, что тычок мышкой в чарт сломает робота.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Конечно, на самом деле перерасчитывается только вновь пришедшая информация, неизменная кэшируется. Но для программиста на AFL все выглядит как ПОЛНЫЙ перерасчет
Когда Вы тыкаете мышкой на какую-то свечу происходит исключительно печать уже рассчитанных значений. сломать ничего не получится )
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Странная штука с директориями. Скрипту Qpile пофиг, конечно, где лежит файл с командой, но бардак не хотелось разводить.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
// Смотрим текущую позицию и отрабатываем сигналы. CurrentPosition хранит 0, если позиции нет и размер позиции, если она есть
CurrentPosition = StrToNum(StaticVarGetText("POSITION"));
if (CurrentPosition == 0)
{ if (LastValue(Buy))
{ Make_Order(ClassCode,SecCode,"Buy",Size);
StaticVarSetText("POSITION","" + Size);
}
}
else
{ if (LastValue(Sell))
{ Make_Order(ClassCode,SecCode,"Sell",CurrentPosition);
StaticVarSetText("POSITION","0");
}
}
...и не понял - несмотря на то, что тут сначала анализируется переменная CurrentPosition и позиции открываются только в лонг, в половине случаев все-равно должна происходить повторная отправка транзакции, но она, очевидно, не происходит. Или происходит?
В общем, что-то я в непонятках.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
" в половине случаев все-равно должна происходить повторная отправка транзакции"- не будет так как
значение CurrentPosition будет =1.
И if (CurrentPosition == 0) - ложно.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
CurrentPosition = StaticVarGet("POSITION");
if (CurrentPosition == 0)
{
if (LastValue(Buy))
{
Make_Order("B");
StaticVarSet("POSITION",1);
}
if (LastValue(Sell))
{
Make_Order("S");
StaticVarSet("POSITION",-1);
}
}
if (CurrentPosition == 1)
{
if (LastValue(Sell))
{
Make_Order("S");
StaticVarSet("POSITION",-1);
}
}
if (CurrentPosition == -1)
{
if (LastValue(Buy))
{
Make_Order("B");
StaticVarSet("POSITION",1);
}
}
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
замените на
CurrentPosition = NZ(StaticVarGet("POSITION"));
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.