Автор |
Сообщение |
N2NN
Гость
|
Добрый день
Олег, а какие изменения нужно внести в раздел "Сюда руками не лазить" чтобы команда в QUIK посылалась немедленно, (как только соответствующая команда появляется в анализаторе), а не ждала открытия нового бара.
Заранее спасибо |
|
|
|
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
N2NN писал(а): |
Добрый день
Олег, а какие изменения нужно внести в раздел "Сюда руками не лазить" чтобы команда в QUIK посылалась немедленно, (как только соответствующая команда появляется в анализаторе), а не ждала открытия нового бара.
Заранее спасибо |
Команда посылается немедленно, только причем здесь анализатор, если робот на основе сканера. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
commenced писал(а): |
Команда посылается немедленно, только причем здесь анализатор, если робот на основе сканера. |
В Ами это называется АА. Автоматический анализатор.
N2NN писал(а): |
Добрый день
Олег, а какие изменения нужно внести в раздел "Сюда руками не лазить" чтобы команда в QUIK посылалась немедленно, (как только соответствующая команда появляется в анализаторе), а не ждала открытия нового бара.
Заранее спасибо |
Никаких изменений не надо. Как уже было сказано команда и так посылается немедленно в момент её возникновения. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Код: |
Buy = LastValue(Buy);
Sell = LastValue(Sell);
Short = LastValue(Short);
Cover = LastValue(Cover);
//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////
Classcode = GroupID(1);
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;
procedure savetrifile(stransid,sstr)
{
f = fopen(FileName, "r");
found = 0;
if(f)
{
while(!feof(f))
{
s = fgets(f);
if(StrFind( s, stransid) > 0) found = 1;
}
fclose(f);
}
if (NOT found)
{
f = fopen(FileName, "a");
if(f)
{
fputs(sstr+"\n",f);
fclose(f);
}
}
}
function makeandsave(sOper, operID, sprice)
{
CCS="";
if (Client != "") CCS="CLIENT_CODE="+Client+";";
transid = "TRANS_ID=" +FullName() + NumToStr(operID, format=1.0) + LastValue(TimeNum())+"; ";
str = transid +
"PRICE=" +NumToStr(sprice, format = 1.0, separator=False)+"; " + "QUANTITY=" +NumToStr(Lots, format = 1.0)+"; "+
"OPERATION=" +sOper+"; "+
"CLASSCODE=" +Classcode+"; "+
"ACTION=" +"NEW_ORDER; "+
"TYPE=" +"L; "+
"SECCODE=" +Name()+"; "+
"ACCOUNT=" +Account+"; "+
CCS;
savetrifile(transid, str);
}
if (TimeFrame == Interval()/60 & FullName() != "")
{
if(Buy)
{
price = Close[BarCount-1] + Otstup;
makeandsave("B", 1, price);
}
if(Sell)
{
price = Close[BarCount-1] - Otstup;
makeandsave("S", 2, price);
}
if(Short)
{
price = Close[BarCount-1] - Otstup;
makeandsave("S", 3, price);
}
if(Cover)
{
price = Close[BarCount-1] + Otstup;
makeandsave("B", 4, price);
}
}//// mehanizator (c) 2004, ссылки мне запрещены
//// 000 (c) 2008, реклама покоцана мной |
Олег, какаято фигня, включаю сканер при возникновении сигнала летит не 1 заявка, а несколько, стоит часовик, проходит сигнал уходит заявка, потом проходит минут 10 и снова отправляются заявки (на том же баре), как такое возможно. бэктест выдает сигналы и они совподают с сигналами индикатора. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Давай угадаю. У тебя базовый фрейм меньше, чем фрейм на котором работает робот и ID этих заявок в tri разное? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Давай угадаю. У тебя базовый фрейм меньше, чем фрейм на котором работает робот и ID этих заявок в tri разное? |
Да, а базовый фрейм ему разве не побарабану, в АА выставлен тоже час. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Там фигня в том, что робот определяет отправлена ли уже заявка по этому сигналу находя её (заявку в tri). А заявка идентифицируется по ID. А ID составляется из имени, времени и типа сигнала
Код: |
transid = "TRANS_ID=" +FullName()+LastValue(TimeNum())+dir+"; "; |
Когда базовый фрейм меньше чем рабочий получается так, что время последней свечки последовательно равно времени последних свечек её состовляющих. Поэтому оно меняется, а значит меняется и ID. Вот робот и не узнает заявку и отправляет её снова... Как вариант можно вставлять в идентификатор время прошлой (уже закрытой) свечки. Попробуй сделать так
Код: |
transid = "TRANS_ID=" +FullName()+LastValue(Ref(TimeNum(), -1))+dir+"; ";
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Там фигня в том, что робот определяет отправлена ли уже заявка по этому сигналу находя её (заявку в tri). А заявка идентифицируется по ID. А ID составляется из имени, времени и типа сигнала
Код: |
transid = "TRANS_ID=" +FullName()+LastValue(TimeNum())+dir+"; "; |
Когда базовый фрейм меньше чем рабочий получается так, что время последней свечки последовательно равно времени последних свечек её состовляющих. Поэтому оно меняется, а значит меняется и ID. Вот робот и не узнает заявку и отправляет её снова... Как вариант можно вставлять в идентификатор время прошлой (уже закрытой) свечки. Попробуй сделать так
Код: |
transid = "TRANS_ID=" +FullName()+LastValue(Ref(TimeNum(), -1))+dir+"; ";
|
|
Ок |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Код: |
///////// Установки ///////////
TimeFrame = 5; // таймфрейм в минутах.
Account = "SPBFUююююююююююю"; // ваш аккаунт на бирже
Client = "SPBFююююююю"; // код клиента
Lots = 1; // сколько лотов желаете торговать
Otstup = 0.05; // в процентах. заявка будет выставлена хуже текущей цены на столько процентов
FileName ="c:/tranzi/trans.tri"; // слэши прямые!!! имя файла с транзакциями для квика
Buy = LastValue(Buy);
Sell = LastValue(Sell);
Short = LastValue(Short);
Cover = LastValue(Cover);
//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////
Classcode = GroupID(1);
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;
procedure savetrifile(stransid,sstr)
{
f = fopen(FileName, "r");
found = 0;
if(f)
{
while(!feof(f))
{
s = fgets(f);
if(StrFind( s, stransid) > 0) found = 1;
}
fclose(f);
}
if (NOT found)
{
f = fopen(FileName, "a");
if(f)
{
fputs(sstr+"\n",f);
fclose(f);
}
}
}
function makeandsave(sOper, operID, sprice)
{
CCS="";
if (Client != "") CCS="CLIENT_CODE="+Client+";";
transid = "TRANS_ID=" +FullName() + NumToStr(operID, format=1.0) + LastValue(TimeNum())+"; ";
str = transid +
"PRICE=" +NumToStr(sprice, format = 1.0, separator=False)+"; " + "QUANTITY=" +NumToStr(Lots, format = 1.0)+"; "+
"OPERATION=" +sOper+"; "+
"CLASSCODE=" +Classcode+"; "+
"ACTION=" +"NEW_ORDER; "+
"TYPE=" +"L; "+
"SECCODE=" +Name()+"; "+
"ACCOUNT=" +Account+"; "+
CCS;
savetrifile(transid, str);
}
if (TimeFrame == Interval()/60 & FullName() != "")
{
if(Buy)
{
price = Close[BarCount-1] + Otstup;
makeandsave("B", 1, price);
}
if(Sell)
{
price = Close[BarCount-1] - Otstup;
makeandsave("S", 2, price);
}
if(Short)
{
price = Close[BarCount-1] - Otstup;
makeandsave("S", 3, price);
}
if(Cover)
{
price = Close[BarCount-1] + Otstup;
makeandsave("B", 4, price);
}
}//// mehanizator (c) 2004, ссылки мне запрещены
//// 000 (c) 2008, реклама покоцана мной |
Олег подскажи пожалуста какие необходимо внести изменения. чтоб не зависить от тайма. а от номера свечи и проверка чтоб есно проводилась следующим образом. если заявка с текущего бара 567 ушла не отправлять до появления следующего сигнала с текущего бара с номером отличым от 567. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вот тут
Код: |
...
function makeandsave(sOper, operID, sprice)
{
CCS="";
if (Client != "") CCS="CLIENT_CODE="+Client+";";
transid = "TRANS_ID=" +FullName() + NumToStr(operID, format=1.0) + LastValue(TimeNum())+"; ";
...
|
исправь LastValue(TimeNum()) на Barcount и в начале кода напиши SetBarsRequired(100000, 0);
Имей ввиду, что это я не проверял... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Вот тут
Код: |
...
function makeandsave(sOper, operID, sprice)
{
CCS="";
if (Client != "") CCS="CLIENT_CODE="+Client+";";
transid = "TRANS_ID=" +FullName() + NumToStr(operID, format=1.0) + LastValue(TimeNum())+"; ";
...
|
исправь LastValue(TimeNum()) на Barcount и в начале кода напиши SetBarsRequired(100000, 0);
Имей ввиду, что это я не проверял... |
Спасибо. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Олег ты писал что роботу необходимо чтоб базовый фрейм был не меньше чем торгуемый в противном случае id будет присваиваться номер с базового тайма, поэтому возможна отправка нескольких заявок. подскажи пожалуста кусок кода который присваивает ID и кусок проверяющий отправлялась ли заявка с текущим id или нет. Предлогоженная тобой замена ничего не дает. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вот прямо с ходу ничего в голову не пришло... Буду думать. А что мешает сделать базу с базовым фреймом равным торгуемому? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Вот прямо с ходу ничего в голову не пришло... Буду думать. А что мешает сделать базу с базовым фреймом равным торгуемому? |
Просто базового нет, в смысле время вообще отсутствует есть массив HOLC и номер бара |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если фрейм установленный в качестве базового и фрейм заданный в настройках АА равны, то, в любом случае, должно работать нормально. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|