Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Другой вариант робота Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Июн 09, 2008 1:46 pm Ответить с цитатой Вернуться к началу

60*60=360?!!!
Иди в магазин за калькулятором. Купи самый большой. Smile

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 1:49 pm Ответить с цитатой Вернуться к началу

000 писал(а):
60*60=360?!!!
Иди в магазин за калькулятором. Купи самый большой. Smile


Пля...... Smile Во лоханулся, но с ценой косяк один фиг был. Ты посмотрел, я расчет отступа выкинул и воткнул в цикл расчета Price.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Июн 09, 2008 1:52 pm Ответить с цитатой Вернуться к началу

По прежнему не работает?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 2:01 pm Ответить с цитатой Вернуться к началу

000 писал(а):
По прежнему не работает?


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

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 3:19 pm Ответить с цитатой Вернуться к началу

Еще один косяк вылез, в сканере отображается, что сигнал был Buy и Cover, но покупает только число определенное Lots, а должен в 2 раза больше. Sad

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

СообщениеДобавлено: Пн Июн 09, 2008 3:48 pm Ответить с цитатой Вернуться к началу

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
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 3:53 pm Ответить с цитатой Вернуться к началу

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, но это так проблему не решает.

Олег почему лотов мало? Sad

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Июн 09, 2008 4:12 pm Ответить с цитатой Вернуться к началу

Цитата:
Олег почему лотов мало?

Когда писАл робота, не предусмотрел, что на одном баре могут быть одновременно две продажи. У меха они различались в 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
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 4:24 pm Ответить с цитатой Вернуться к началу

Сперва покажу чтото, т.к. планирую торговать роботом сразу на стоке и фортсе, то блин, вынужден вернуться к цене, у них и правда шаги разные посмотри пожалуста.

Код:
 "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

СообщениеДобавлено: Пн Июн 09, 2008 4:25 pm Ответить с цитатой Вернуться к началу

Или можно оставить как было, но добавить расчет размера лота

Lots = IIF((Buy & Cover) or (short & sell), lots*2, lots);

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Июн 09, 2008 4:29 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Пн Июн 09, 2008 4:33 pm Ответить с цитатой Вернуться к началу

Хм. Делал именно так
Код:

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
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 4:34 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Пн Июн 09, 2008 4:36 pm Ответить с цитатой Вернуться к началу

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
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Июн 09, 2008 4:37 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Хм. Делал именно так
Код:

Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;

Но в начале кода отступ задается в процентах. Т.е. если надо 2% то пишем 2, если 1%, то 1.
А у тебя было написано 0,2. Наверное поэтому и не работало. Ща думать лень.


Напугал, я уж подумал что вместо точки, запятую поставил. Проверил нет все правильно.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen