Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
60*60=360?!!!
Иди в магазин за калькулятором. Купи самый большой. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
60*60=360?!!!
Иди в магазин за калькулятором. Купи самый большой. |
Пля...... Во лоханулся, но с ценой косяк один фиг был. Ты посмотрел, я расчет отступа выкинул и воткнул в цикл расчета Price. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
По прежнему не работает? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
По прежнему не работает? |
В смысле,яж говорю что изменил расчет цены, счас работает, но хочу чтоб ты окончательное добро дал, а если ты насчет тайма, то я менять не стал, зачем в секундах, когда можно в минутах, цыфра не такая большая. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Еще один косяк вылез, в сканере отображается, что сигнал был Buy и Cover, но покупает только число определенное Lots, а должен в 2 раза больше.
Ticker Trade Date Close
ROSN Buy 09.06.2008 16:00:00 277.3500
ROSN Cover 09.06.2008 16:00:00 277.3500
должен 52, а отправил 26. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
commenced писал(а): |
Так работает:
Код: |
if (TimeFrame == Interval()/60 & FullName() != "")
{
if(Buy)
{
price=(1+Otstup/100)*Close[BarCount-1];
makeandsave("B", price);
}
if(Sell)
{
price=(1-Otstup/100)*Close[BarCount-1];
makeandsave("S", price);
}
if(Short)
{
price=(1-Otstup/100)*Close[BarCount-1];
makeandsave("S", price);
}
if(Cover)
{
price=(1+Otstup/100)*Close[BarCount-1];
makeandsave("B", price);
}
}
|
Только Олег посмотри код внимательнее, я конечно менял сам и все такое, но я пока в себе не уверен. |
Я не знаю как на ФОРТС, а на МАМБЕ квик ругается если в цене заявки, после запятой знаков больше, чем в TickSize.
C этим могут быть косяки. Проверь.
Это единственный нюансик. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
commenced писал(а): |
Так работает:
Код: |
if (TimeFrame == Interval()/60 & FullName() != "")
{
if(Buy)
{
price=(1+Otstup/100)*Close[BarCount-1];
makeandsave("B", price);
}
if(Sell)
{
price=(1-Otstup/100)*Close[BarCount-1];
makeandsave("S", price);
}
if(Short)
{
price=(1-Otstup/100)*Close[BarCount-1];
makeandsave("S", price);
}
if(Cover)
{
price=(1+Otstup/100)*Close[BarCount-1];
makeandsave("B", price);
}
}
|
Только Олег посмотри код внимательнее, я конечно менял сам и все такое, но я пока в себе не уверен. |
Я не знаю как на ФОРТС, а на МАМБЕ квик ругается если в цене заявки, после запятой знаков больше, чем в TickSize.
C этим могут быть косяки. Проверь.
Это единственный нюансик. |
Еще тут изменение внес
"PRICE=" +NumToStr(sprice, format = 1.2, separator=False)+"; " +
чтоб 2 знака после запятой, а не 3, но это так проблему не решает.
Олег почему лотов мало? |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
Олег почему лотов мало? |
Когда писАл робота, не предусмотрел, что на одном баре могут быть одновременно две продажи. У меха они различались в transid при помощи sOperID, а я это дело выкинул.
Вот так сделай. Должны получится две заявки sell и short обычным лотом
Код: |
///////// Установки ///////////
TimeFrame = 360; // таймфрейм в секундах.
Account = "L01-00100F00"; // ваш аккаунт на бирже
Client = " 21345"; // код клиента
Lots =
IIf(Name() == "GAZP", 22,
IIf(Name() == "LKOH", 3,
IIf(Name() == "GMKN",1,
IIf(Name() == "SBER03",95,
26)))); // сколько лотов желаете торговать
Otstup = 0.2; // в процентах. заявка будет выставлена хуже текущей цены на столько процентов
FileName ="D:/tranzi/trans.tri"; // слэши прямые!!! имя файла с транзакциями для квика
////////// Правила системы ///////////////
Buy = условие;
BuyPrice = O;
Short = условие;
ShortPrice = O;
Sell = Short;
SellPrice = ShortPrice;
Cover=Buy;
CoverPrice = BuyPrice;
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
Short = ExRem(Short,Cover);
Cover = ExRem(Cover,Short);
Buy = ExRem(Buy,Short);
Short = ExRem(Short,Buy);
//////////////////////////////////////////////////////////////////////////////////////////////
//Звук
AlertIf( Buy, "SOUND c:/WINDOWS/Media/tada.wav", "Длинная позиция",0,1+2+4+8);
AlertIf( Sell, "SOUND c:/WINDOWS/Media/tada.wav", "Выход из длинной позиции",0,1+2+4+8);
AlertIf( Short, "SOUND c:/WINDOWS/Media/tada.wav", "Короткая позиция",0,1+2+4+8);
AlertIf( Cover, "SOUND c:/WINDOWS/Media/tada.wav", "Выход из короткой позиции",0,1+2+4+8);
//////////////////////////////////////////////////////////////////////////////////////////////
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
Plot( O, "O", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
Plot( H, "H", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
Plot( L, "L", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Sell,shapeDownArrow,0),4,0,Graph0,-15);
PlotShapes(IIf(Cover,shapeHollowUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Short,shapeHollowDownArrow,0),4,0,Graph0,-15);
Buy = LastValue(Buy);
Sell = LastValue(Sell);
Short = LastValue(Short);
Cover = LastValue(Cover);
//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////
Classcode = GroupID(1);
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.2, 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=(1+Otstup/100)*Close[BarCount-1];
makeandsave("B", 1, price);
}
if(Sell)
{
price=(1-Otstup/100)*Close[BarCount-1];
makeandsave("S", 2, price);
}
if(Short)
{
price=(1-Otstup/100)*Close[BarCount-1];
makeandsave("S", 3, price);
}
if(Cover)
{
price=(1+Otstup/100)*Close[BarCount-1];
makeandsave("B", 4, price);
}
}
//// mehanizator (c) 2004, ссылки мне запрещены
//// 000 (c) 2008, реклама покоцана мной
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег.
Последний раз редактировалось: 000 (Пн Июн 09, 2008 4:37 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Сперва покажу чтото, т.к. планирую торговать роботом сразу на стоке и фортсе, то блин, вынужден вернуться к цене, у них и правда шаги разные посмотри пожалуста.
Код: |
"PRICE=" +NumToStr(sprice, format = 1.0, separator=False)*TickSize+"; " + |
Код: |
if (TimeFrame == Interval()/60 & FullName() != "")
{
if(Buy)
{
price=round((1+Otstup/100)*Close[BarCount-1]/TickSize);
makeandsave("B", price);
}
if(Sell)
{
price=round((1-Otstup/100)*Close[BarCount-1]/TickSize);
makeandsave("S", price);
}
if(Short)
{
price=round((1-Otstup/100)*Close[BarCount-1]/TickSize);
makeandsave("S", price);
}
if(Cover)
{
price=round((1+Otstup/100)*Close[BarCount-1]/TickSize);
makeandsave("B", price);
}
} |
|
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Или можно оставить как было, но добавить расчет размера лота
Lots = IIF((Buy & Cover) or (short & sell), lots*2, lots); |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
commenced писал(а): |
Сперва покажу чтото, т.к. планирую торговать роботом сразу на стоке и фортсе, то блин, вынужден вернуться к цене, у них и правда шаги разные посмотри пожалуста.
Код: |
"PRICE=" +NumToStr(sprice, format = 1.0, separator=False)*TickSize+"; " + |
|
Это ерунда полная. Ты умножаешь слово(NumToStr(sprice, format = 1.0, separator=False)) на цифру (TickSize)
[quote]
Код: |
if (TimeFrame == Interval()/60 & FullName() != "")
{
if(Buy)
{
price=round((1+Otstup/100)*Close[BarCount-1]/TickSize);
makeandsave("B", price);
}
if(Sell)
{
price=round((1-Otstup/100)*Close[BarCount-1]/TickSize);
makeandsave("S", price);
}
if(Short)
{
price=round((1-Otstup/100)*Close[BarCount-1]/TickSize);
makeandsave("S", price);
}
if(Cover)
{
price=round((1+Otstup/100)*Close[BarCount-1]/TickSize);
makeandsave("B", price);
}
} |
Это тоже не правильно. Ща у себя найду как делал и выложу. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Хм. Делал именно так
Код: |
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;
|
Но в начале кода отступ задается в процентах. Т.е. если надо 2% то пишем 2, если 1%, то 1.
А у тебя было написано 0,2. Наверное поэтому и не работало. Ща думать лень. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег.
Последний раз редактировалось: 000 (Пн Июн 09, 2008 4:35 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Цитата: |
Олег почему лотов мало? |
Когда писАл робота, не предусмотрел, что на одном баре могут быть одновременно две продажи. У меха они различались в transid при помощи sOperID, а я это дело выкинул.
Вот так сделай. Должны получится две заявки sell и short обычным лотом
Код: |
///////// Установки ///////////
TimeFrame = 360; // таймфрейм в секундах.
Account = "L01-00100F00"; // ваш аккаунт на бирже
}
}
//// mehanizator (c) 2004, ссылки мне запрещены
//// 000 (c) 2008, реклама покоцана мной
|
|
transid = "TRANS_ID=" +FullName() + NumToStr(operID, format1.0)+ +LastValue(TimeNum())+"; ";
Выдает ошибку Error 31. Syntax error, expecting <list of tokens> |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
transid = "TRANS_ID=" +FullName() + NumToStr(operID, format=1.0) + LastValue(TimeNum())+"; ";
пропустил. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег.
Последний раз редактировалось: 000 (Пн Июн 09, 2008 4:38 pm), всего редактировалось 2 раз(а) |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Хм. Делал именно так
Код: |
Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;
|
Но в начале кода отступ задается в процентах. Т.е. если надо 2% то пишем 2, если 1%, то 1.
А у тебя было написано 0,2. Наверное поэтому и не работало. Ща думать лень. |
Напугал, я уж подумал что вместо точки, запятую поставил. Проверил нет все правильно. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|