× Ссылка на скачивание архива: www.bot4sale.ru/download-categories/2012...6/item/amisharp.html (архив под паролем)

Несколько вопросов по стопам, заявкам и позиции

Подробнее
11 года 9 мес. назад - 11 года 9 мес. назад #802 от sstyle
попробовал. сработало, только почему то дальше пытается выполнять:

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

и дальше еще куча попыток купить. То есть поступает сигнал на покупку, и амиброкер пока свеча не закроется пытается постоянно выставлять заявку
Последнее редактирование: 11 года 9 мес. назад пользователем sstyle.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
11 года 9 мес. назад #803 от admin
Мне трудно ответить однозначно - я не вижу кода.

Вероятно, что после закрытия позиции пред входом в противоположную нужно изменить значение current_position. Обнулить.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
11 года 9 мес. назад #804 от sstyle
Даже когда CurrentPosition меняет свое значение, все равно продолжает пытаться выставить приказ, до тех пор, пока свечка не закроется..

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);
}
}

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
11 года 9 мес. назад #806 от admin

if (LastValue(Cover))
{ Make_Order(ClassCode,SecCode,"Buy",abs(CurrentPosition));
Make_Order(ClassCode,SecCode,"Buy",Size);
StaticVarSetText("POSITION","" + CurrentPosition);



после первого Make_Order разве не нужно CurrentPosition Вам обновить?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
11 года 9 мес. назад - 11 года 9 мес. назад #807 от sstyle
Дык заявка квиком испонится, амишарп получит новое значение текущей позиции = 0 и все. А зачем его обновлять? заявка то идет верно, сначала на закрытие позиции а потом на открытие с правильной цифрой. другое дело что после исполнения второй сделки, когда мы входим в позицию, заявки продолжают долбиться, хотя текущая позиция уже тоже не равна 0.

в #802 сообщении видно что обе заявки исполняются, но после второй идет еще десяток другой заявок аналогичных пока не закроется свеча
Последнее редактирование: 11 года 9 мес. назад пользователем sstyle.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
11 года 9 мес. назад #812 от admin
В логе видно что

23.09.2014 17:41:06 GetCellName("[realbook]position","TOTAL_NET",1) = 0


то есть завки из терминала уходят, а total-net равно 0.

Если разберетесь, в чем проблема - вы сами ответите на свой вопрос.

Только учтите, что таблица позиций в квике обновляется не мгновенно, а с небольшим лагом по времени.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
11 года 9 мес. назад - 11 года 9 мес. назад #813 от sstyle
Нет, Михаил. Смотрите, выложу побольше лога

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


так что с текущей позицией все в порядке. он тупо продолжает создавать заявки, даже после отработки сигнала пока не закроется свеча
Последнее редактирование: 11 года 9 мес. назад пользователем sstyle.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
11 года 9 мес. назад - 11 года 9 мес. назад #814 от admin
sstyle

Я вам писал, что таблица позиций квика обновляется с задержкой. Проанализируйие Ваш лог, в нем все ответы есть.:

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. Результат последней сделки, (порожденной второй транзакцией) еще не обновился в таблице позиций. Алгоритм сломался.

Ждите появдение сделок в таблице сделок или как-то еще.

Это распространенная ошибка при написании роботов на любом языке программирования.
Последнее редактирование: 11 года 9 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
11 года 9 мес. назад - 11 года 9 мес. назад #816 от sstyle
Спасибо, попробую.

Помогите пожалуйста со стопом. Задача очень простая. Чем больше рост, тем больше отступ от максимальной цены.

Например: ставим стоп 10% от разницы между покупкой и максимумом. купили за 100000, вырос фьючерс до 100500(максимум). Разница: 500пт. Значит стоп - 50пт.

Вот начал пробовать как-то так. Но дальше знаний не хватает

для шорта:
for ( i = 1; i < BarCount; i++ )
{ 
   MinValue = LowestSince(Short,Low);
	Vol = (BuyPrice[i] - MinValue);
}
Последнее редактирование: 11 года 9 мес. назад пользователем sstyle.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
11 года 9 мес. назад - 11 года 9 мес. назад #849 от sstyle
Михаил, добрый день.

Почему-то не отправляются сигналы в амишарп, если есть строка 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));

      }
   }


Верно?
Последнее редактирование: 11 года 9 мес. назад пользователем sstyle.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
11 года 9 мес. назад #850 от admin
Здравствуйте.

Если Amisharp.Сonnect() вызван когда-то ранее - то можно попробовать запустить.
Спасибо сказали: sstyle

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
11 года 9 мес. назад #851 от sstyle
Попробую, спасибо. А подскажите еще пожалуйста, как После выполнения make_order на текущую свечку поставить стрелку-сигнал?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
11 года 9 мес. назад #852 от admin

sstyle пишет: Попробую, спасибо. А подскажите еще пожалуйста, как После выполнения make_order на текущую свечку поставить стрелку-сигнал?



Принцип такой. Знаете текущее время. Через функцию _DT находите свечку на графике, которая покрывает время выставления заявки. И ставите туда метку. И так на каждой итерации. Соответственно, сделки надо хранить.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
10 года 1 мес. назад #1119 от andrybestx
я только на сайте, еще плохо ориентируюсь. просьба админу или тем кто в теме разъяснить: 1) Амиброкер программа и амишарп к ней сделаны для работы в реале или для тестов? т.е. идея была подружить квик с амиброкер - более продвинутой программой теханализа и торговать из амиброкера? или амиброкер чисто для теханализа идет? 2) что лучше использовать для быстрой и легкой постановки стопов в квике одновременно с подачей заявки - если такое возможно. 3) что делать если квик старой версии работает а при обновлении (сервер предлагает) до новой версии он перестает работать, и приходиться делать откат к старой версии и в ней висеть (квик газпромовский там же счет), честно говоря забодал этот квик, внутри дня очень сложно и неудобно работать. Кто и как решает эту проблему - просьба откликнуться. с уваж. а.и.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подробнее
10 года 1 мес. назад - 10 года 1 мес. назад #1120 от admin
Я отвечу в порядке поставленых вопросов.

1) Амиброкер программа и амишарп к ней сделаны для работы в реале или для тестов?
Бектест и оптимизатор есть встроенная возможность амиброкера . Амишарп к ним отношения не имеет.

т.е. идея была подружить квик с амиброкер - более продвинутой программой теханализа и торговать из амиброкера?
Верно!

или амиброкер чисто для теханализа идет?
Теханализ в амиброкере - это маленькое счастье после квика или любого другого метатрейдера. Однако амишарп к этому отношения не имеет - он предназначен для реальной торговли из амиброкера через терминал quik


2) что лучше использовать для быстрой и легкой постановки стопов в квике одновременно с подачей заявки - если такое возможно.
Не имеет значения. Вы можете ставить стопы из терминала квик руками, из терминала квик программно или программно из амиброкера - эффект абсолютно одинаков. По скорости нет никакой разницы между посылкой транзакции из встроенного языка quik или из амиброкера через амишарп

. 3) что делать если квик старой версии работает а при обновлении ....
Этот вопрос не имеет отношения к амиброкеру, амишарпу и любым другим внешним программам. Если возникают проблемы с обновлением рабочего места quik - у вас есть всегда палочка-выручалочка:- техподдержка брокера. Звоните, просите, ругайтесь, издевайтесь, требуйте. Не надо стесняться - вы платите деньги. Они вам обязаны помочь. И помогут., не тушуйтесь.
Последнее редактирование: 10 года 1 мес. назад пользователем admin.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Модераторы: admin