Несколько вопросов по стопам, заявкам и позиции
23.09.2014 17:41:04 QuikSendSyncTransaction("ACTION=NEW_ORDER;TRANS_ID=2280;SECCODE=RIZ4;QUANTITY=2;OPERATION=B;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00wrd;CLIENT_CODE=SPBFUT00wrd;TYPE=M;TYPE=L;PRICE=121690;") = 1,13385748033,Заявка с биржевым номером 13385748033 успешно зарегистрирована.,0,
23.09.2014 17:41:04 QuikDisconnect() = 1
23.09.2014 17:41:04 Generate_TransID() = 2281
23.09.2014 17:41:04 GetCellName("[realbook]currenttable","pricemax",1) = 121690
23.09.2014 17:41:04 QuikSendSyncTransaction("ACTION=NEW_ORDER;TRANS_ID=2281;SECCODE=RIZ4;QUANTITY=3;OPERATION=B;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00wrd;CLIENT_CODE=SPBFUT00wrd;TYPE=M;TYPE=L;PRICE=121690;") = 0,13385748033,,0,
23.09.2014 17:41:04 QuikDisconnect() = 0
23.09.2014 17:41:06 QuikConnect("C:\QuikFinam") = 1
23.09.2014 17:41:06 TraceLog("C:\AmiSharp\log_real.log") = C:\AmiSharp\log_real.log
23.09.2014 17:41:06 GetCellName("[realbook]limit","CBPLIMIT",1) = 46200
23.09.2014 17:41:06 GetCellName("[realbook]position","TOTAL_NET",1) = 0
23.09.2014 17:41:06 Generate_TransID() = 2282
23.09.2014 17:41:06 GetCellName("[realbook]currenttable","pricemax",1) = 121690
23.09.2014 17:41:06 QuikSendSyncTransaction("ACTION=NEW_ORDER;TRANS_ID=2282;SECCODE=RIZ4;QUANTITY=3;OPERATION=B;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00wrd;CLIENT_CODE=SPBFUT00wrd;TYPE=M;TYPE=L;PRICE=121690;") = 1,13385748357,Заявка с биржевым номером 13385748357 успешно зарегистрирована.,0,
23.09.2014 17:41:06 QuikDisconnect() = 1
и дальше еще куча попыток купить. То есть поступает сигнал на покупку, и амиброкер пока свеча не закроется пытается постоянно выставлять заявку
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Вероятно, что после закрытия позиции пред входом в противоположную нужно изменить значение current_position. Обнулить.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Sell = Short = Cross(MA( Close , MAt4 ), MA( Close , MAt3 ));
Buy = Cover = Cross(MA( Close , MAt3 ), MA( Close , MAt4 ));
Cover = ExRem(Cover,Short);
Short = ExRem(Short,Cover);
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
Size = int(StrToNum(AmiSharp.GetCellName("[realbook]limit","CBPLIMIT",1))*Koef/GO);
CurrentPosition = StrToNum(AmiSharp.GetCellName("[realbook]position","TOTAL_NET",1));
if (CurrentPosition == 0)
{ if (LastValue(Short))
{ Make_Order(ClassCode,SecCode,"Sell",Size);
StaticVarSetText("POSITION","" + CurrentPosition);
}
if (LastValue(Buy))
{ Make_Order(ClassCode,SecCode,"Buy",Size);
StaticVarSetText("POSITION","" + CurrentPosition);
}
}
else
{ if (LastValue(Cover))
{ Make_Order(ClassCode,SecCode,"Buy",abs(CurrentPosition));
Make_Order(ClassCode,SecCode,"Buy",Size);
StaticVarSetText("POSITION","" + CurrentPosition);
}
if (LastValue(Sell))
{ Make_Order(ClassCode,SecCode,"Sell",abs(CurrentPosition));
Make_Order(ClassCode,SecCode,"Sell",Size);
StaticVarSetText("POSITION","" + CurrentPosition);
}
}
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
if (LastValue(Cover))
{ Make_Order(ClassCode,SecCode,"Buy",abs(CurrentPosition));
Make_Order(ClassCode,SecCode,"Buy",Size);
StaticVarSetText("POSITION","" + CurrentPosition);
после первого Make_Order разве не нужно CurrentPosition Вам обновить?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
в #802 сообщении видно что обе заявки исполняются, но после второй идет еще десяток другой заявок аналогичных пока не закроется свеча
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
23.09.2014 17:41:06 GetCellName("[realbook]position","TOTAL_NET",1) = 0
то есть завки из терминала уходят, а total-net равно 0.
Если разберетесь, в чем проблема - вы сами ответите на свой вопрос.
Только учтите, что таблица позиций в квике обновляется не мгновенно, а с небольшим лагом по времени.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
23.09.2014 17:41:03 QuikConnect("C:\QuikFinam") = 0
23.09.2014 17:41:03 TraceLog("C:\AmiSharp\log_real.log") = C:\AmiSharp\log_real.log
23.09.2014 17:41:03 GetCellName("[realbook]limit","CBPLIMIT",1) = 46200
23.09.2014 17:41:03 GetCellName("[realbook]position","TOTAL_NET",1) = -2
23.09.2014 17:41:03 Generate_TransID() = 2280
23.09.2014 17:41:03 GetCellName("[realbook]currenttable","pricemax",1) = 121690
23.09.2014 17:41:04 QuikSendSyncTransaction("ACTION=NEW_ORDER;TRANS_ID=2280;SECCODE=RIZ4;QUANTITY=2;OPERATION=B;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00wrd;CLIENT_CODE=SPBFUT00wrd;TYPE=M;TYPE=L;PRICE=121690;") = 1,13385748033,Заявка с биржевым номером 13385748033 успешно зарегистрирована.,0,
23.09.2014 17:41:04 QuikDisconnect() = 1
23.09.2014 17:41:04 Generate_TransID() = 2281
23.09.2014 17:41:04 GetCellName("[realbook]currenttable","pricemax",1) = 121690
23.09.2014 17:41:04 QuikSendSyncTransaction("ACTION=NEW_ORDER;TRANS_ID=2281;SECCODE=RIZ4;QUANTITY=3;OPERATION=B;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00wrd;CLIENT_CODE=SPBFUT00wrd;TYPE=M;TYPE=L;PRICE=121690;") = 0,13385748033,,0,
23.09.2014 17:41:04 QuikDisconnect() = 0
23.09.2014 17:41:06 QuikConnect("C:\QuikFinam") = 1
23.09.2014 17:41:06 TraceLog("C:\AmiSharp\log_real.log") = C:\AmiSharp\log_real.log
23.09.2014 17:41:06 GetCellName("[realbook]limit","CBPLIMIT",1) = 46200
23.09.2014 17:41:06 GetCellName("[realbook]position","TOTAL_NET",1) = 0
23.09.2014 17:41:06 Generate_TransID() = 2282
23.09.2014 17:41:06 GetCellName("[realbook]currenttable","pricemax",1) = 121690
23.09.2014 17:41:06 QuikSendSyncTransaction("ACTION=NEW_ORDER;TRANS_ID=2282;SECCODE=RIZ4;QUANTITY=3;OPERATION=B;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00wrd;CLIENT_CODE=SPBFUT00wrd;TYPE=M;TYPE=L;PRICE=121690;") = 1,13385748357,Заявка с биржевым номером 13385748357 успешно зарегистрирована.,0,
23.09.2014 17:41:06 QuikDisconnect() = 1
23.09.2014 17:41:07 QuikConnect("C:\QuikFinam") = 1
23.09.2014 17:41:07 TraceLog("C:\AmiSharp\log_real.log") = C:\AmiSharp\log_real.log
23.09.2014 17:41:07 GetCellName("[realbook]limit","CBPLIMIT",1) = 46200
23.09.2014 17:41:07 GetCellName("[realbook]position","TOTAL_NET",1) = 3
23.09.2014 17:41:07 Generate_TransID() = 2283
23.09.2014 17:41:07 GetCellName("[realbook]currenttable","pricemax",1) = 121690
23.09.2014 17:41:07 QuikSendSyncTransaction("ACTION=NEW_ORDER;TRANS_ID=2283;SECCODE=RIZ4;QUANTITY=3;OPERATION=B;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00wrd;CLIENT_CODE=SPBFUT00wrd;TYPE=M;TYPE=L;PRICE=121690;") = 1,0,Ошибка создания заявки. [FORTS][332] "Нехватка средств по лимитам клиента.".,0,
23.09.2014 17:41:07 QuikDisconnect() = 1
23.09.2014 17:41:07 Generate_TransID() = 2284
23.09.2014 17:41:07 GetCellName("[realbook]currenttable","pricemax",1) = 121690
23.09.2014 17:41:07 QuikSendSyncTransaction("ACTION=NEW_ORDER;TRANS_ID=2284;SECCODE=RIZ4;QUANTITY=3;OPERATION=B;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00wrd;CLIENT_CODE=SPBFUT00wrd;TYPE=M;TYPE=L;PRICE=121690;") = 0,0,,0,
23.09.2014 17:41:07 QuikDisconnect() = 0
23.09.2014 17:41:09 QuikConnect("C:\QuikFinam") = 1
23.09.2014 17:41:09 TraceLog("C:\AmiSharp\log_real.log") = C:\AmiSharp\log_real.log
23.09.2014 17:41:09 GetCellName("[realbook]limit","CBPLIMIT",1) = 46200
23.09.2014 17:41:09 GetCellName("[realbook]position","TOTAL_NET",1) = 3
23.09.2014 17:41:09 Generate_TransID() = 2285
23.09.2014 17:41:09 GetCellName("[realbook]currenttable","pricemax",1) = 121690
23.09.2014 17:41:09 QuikSendSyncTransaction("ACTION=NEW_ORDER;TRANS_ID=2285;SECCODE=RIZ4;QUANTITY=3;OPERATION=B;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00wrd;CLIENT_CODE=SPBFUT00wrd;TYPE=M;TYPE=L;PRICE=121690;") = 1,0,Ошибка создания заявки. [FORTS][332] "Нехватка средств по лимитам клиента.".,0,
23.09.2014 17:41:09 QuikDisconnect() = 1
так что с текущей позицией все в порядке. он тупо продолжает создавать заявки, даже после отработки сигнала пока не закроется свеча
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Я вам писал, что таблица позиций квика обновляется с задержкой. Проанализируйие Ваш лог, в нем все ответы есть.:
23.09.2014 17:41:03 GetCellName("[realbook]position","TOTAL_NET",1) = -2
23.09.2014 17:41:04 QuikSendSyncTransaction("ACTION=NEW_ORDER;TRANS_ID=2280;SECCODE=RIZ4;QUANTITY=2;OPERATION=B;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00wrd;CLIENT_CODE=SPBFUT00wrd;TYPE=M;TYPE=L;PRICE=121690;") = 1,13385748033,Заявка с биржевым номером 13385748033 успешно зарегистрирована.,0,
QuikSendSyncTransaction("ACTION=NEW_ORDER;TRANS_ID=2281;SECCODE=RIZ4;QUANTITY=3;OPERATION=B;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00wrd;CLIENT_CODE=SPBFUT00wrd;TYPE=M;TYPE=L;PRICE=121690;") = 0,13385748033,,0,
23.09.2014 17:41:06 GetCellName("[realbook]position","TOTAL_NET",1) = 0
Ваш робот работает быстрее, чем сам терминал.
Было -2, купили 2, потом еще 3, а в таблице квика еще 0. Результат последней сделки, (порожденной второй транзакцией) еще не обновился в таблице позиций. Алгоритм сломался.
Ждите появдение сделок в таблице сделок или как-то еще.
Это распространенная ошибка при написании роботов на любом языке программирования.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Помогите пожалуйста со стопом. Задача очень простая. Чем больше рост, тем больше отступ от максимальной цены.
Например: ставим стоп 10% от разницы между покупкой и максимумом. купили за 100000, вырос фьючерс до 100500(максимум). Разница: 500пт. Значит стоп - 50пт.
Вот начал пробовать как-то так. Но дальше знаний не хватает
для шорта:
for ( i = 1; i < BarCount; i++ )
{
MinValue = LowestSince(Short,Low);
Vol = (BuyPrice[i] - MinValue);
}Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Почему-то не отправляются сигналы в амишарп, если есть строка Equity(1);. Сигналы на графике все как положено, а в амишарп сигналы не идут.
Но да ладно, я решил сделать систему стопов в квике, а заявки из амиброкера. Соответственно мне нужно, чтобы амиброкер посылал заявки купить/продать не зависимо от предыдущего сигнала, то есть cover|short мне не нужны в принципе.
Допустим амиброкер посылает сигнал на покупку. Текущая позиция +3. Потом в квике сработал стоп, и амиброкер об этом узнает только потому что изменилась текущая позиция на 0. Потом допустим снова сигнал на покупку и должно быть снова +3.
Я сделал вот так:
(ЕxRem убрал)
CurrentPosition = StrToNum(AmiSharp.GetCellName("[realbook]position","TOTAL_NET",1));
if (CurrentPosition == 0)
{
Buy = Cross(MA( Close , MAt3 ), MA( Close , MAt4 ));
Sell = Cross(MA( Close , MAt4 ), MA( Close , MAt3 ));
if (LastValue(Sell))
{ Make_Order(ClassCode,SecCode,"Sell",Size);
}
if (LastValue(Buy))
{ Make_Order(ClassCode,SecCode,"Buy",Size);
}
}
if (CurrentPosition < 0)
{
Buy = Cross(MA( Close , MAt3 ), MA( Close , MAt4 ));
if (LastValue(Buy))
{ Make_Order(ClassCode,SecCode,"Buy",abs(CurrentPosition));
}
}
if (CurrentPosition > 0)
{
Sell = Cross(MA( Close , MAt4 ), MA( Close , MAt3 ));
if (LastValue(Sell))
{ Make_Order(ClassCode,SecCode,"Sell",abs(CurrentPosition));
}
}
Верно?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Если Amisharp.Сonnect() вызван когда-то ранее - то можно попробовать запустить.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
sstyle пишет: Попробую, спасибо. А подскажите еще пожалуйста, как После выполнения make_order на текущую свечку поставить стрелку-сигнал?
Принцип такой. Знаете текущее время. Через функцию _DT находите свечку на графике, которая покрывает время выставления заявки. И ставите туда метку. И так на каждой итерации. Соответственно, сделки надо хранить.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- andrybestx
- Не в сети
- Новый участник
-
- Сообщений: 3
- Спасибо получено: 0
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
1) Амиброкер программа и амишарп к ней сделаны для работы в реале или для тестов?
Бектест и оптимизатор есть встроенная возможность амиброкера . Амишарп к ним отношения не имеет.
т.е. идея была подружить квик с амиброкер - более продвинутой программой теханализа и торговать из амиброкера?
Верно!
или амиброкер чисто для теханализа идет?
Теханализ в амиброкере - это маленькое счастье после квика или любого другого метатрейдера. Однако амишарп к этому отношения не имеет - он предназначен для реальной торговли из амиброкера через терминал quik
2) что лучше использовать для быстрой и легкой постановки стопов в квике одновременно с подачей заявки - если такое возможно.
Не имеет значения. Вы можете ставить стопы из терминала квик руками, из терминала квик программно или программно из амиброкера - эффект абсолютно одинаков. По скорости нет никакой разницы между посылкой транзакции из встроенного языка quik или из амиброкера через амишарп
. 3) что делать если квик старой версии работает а при обновлении ....
Этот вопрос не имеет отношения к амиброкеру, амишарпу и любым другим внешним программам. Если возникают проблемы с обновлением рабочего места quik - у вас есть всегда палочка-выручалочка:- техподдержка брокера. Звоните, просите, ругайтесь, издевайтесь, требуйте. Не надо стесняться - вы платите деньги. Они вам обязаны помочь. И помогут., не тушуйтесь.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
