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



Зарегистрирован: 20.07.2010
Сообщения: 3
Откуда: Ухта

СообщениеДобавлено: Пт Авг 13, 2010 7:32 am Ответить с цитатой Вернуться к началу

Необходимо написать систему которая торгует портфелем и ориентируется на свободный КЭШ на текущий момент. Или, если по другому, как сделать так, чтобы когда Амиброкер работая в связке с квиком не посылал сигналы портфельной системы на покупку или открытия шорта, если она уже затарилась на все 100% . Как сделать это, подскажите???

_________________
кто сказал что трейдинг -путь к финансовой свободе... Пусть займет денег, чтоб стать посвободнее Smile
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Пт Авг 13, 2010 7:50 am Ответить с цитатой Вернуться к началу

Похоже только один способ. Написать заумный код который все это будет учитывать.
Портфель Ами считает только портфельным тестером. Если робот работает как индикатор, то из индикатора портфельный тестер никак не запустить, Если робот из АА, то опять таки ни Scan ни Explore портфельный тестер не используют.
Как вариант можно попытаться сделать обратную связь с терминалом чтобы робот смотрел доступные деньги. В таком варианте косяк в том, что если терминал тормознул и не вовремя показал уменьшение свободных средств, то возможны неприятные косяки.
Проще всего тупо считать открытые позиции и соответственно доступные средства в коде.

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



Зарегистрирован: 20.07.2010
Сообщения: 3
Откуда: Ухта

СообщениеДобавлено: Пт Авг 13, 2010 9:42 am Ответить с цитатой Вернуться к началу

000 писал(а):

Проще всего тупо считать открытые позиции и соответственно доступные средства в коде.

спасибо - попробую. Вот только как то сложно я это представляю Smile

_________________
кто сказал что трейдинг -путь к финансовой свободе... Пусть займет денег, чтоб стать посвободнее Smile
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Пт Авг 13, 2010 10:32 am Ответить с цитатой Вернуться к началу

вечерком подробнее опишу этот вариант. Если не занят буду. Smile

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



Зарегистрирован: 20.07.2010
Сообщения: 3
Откуда: Ухта

СообщениеДобавлено: Пт Авг 13, 2010 11:32 am Ответить с цитатой Вернуться к началу

000 писал(а):
вечерком подробнее опишу этот вариант. Если не занят буду. Smile

спасибо. должен буду. Smile

_________________
кто сказал что трейдинг -путь к финансовой свободе... Пусть займет денег, чтоб стать посвободнее Smile
Посмотреть профиль Отправить личное сообщение ICQ Number
000
Site Admin


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

СообщениеДобавлено: Сб Авг 14, 2010 8:02 am Ответить с цитатой Вернуться к началу

Ну вот. Видишь, времени не было. Сегодня тоже точно не получится. Жди воскресенья...

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


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

СообщениеДобавлено: Вс Авг 15, 2010 11:39 pm Ответить с цитатой Вернуться к началу

Вот. Вроде должно работать. Только я не проверял.

В двух словах

В настройки добавилась переменная money. Сколько денег на брокерском счету.

Добавились 2 функции
ReadFile()
WriteFile()

Они пишут и чатают файл linked.money который будет создан автоматически в каталоге куда установлен Ами. В этом файле сумма связанных денег. При необходимости его содержимое можно править просто блокнотом.

При открытии длинной или короткой позиции наличие свободных средст на неё определяется
(money - linkedMoney) > LastValue(C)*1.1*Lots)
Используется коэфициент 1,1 на всякий случай.

При вызове функции makeandsave добавился еще один (третий) параметр. если 1 то деньги связываются, если -1 то освобождаются.

функция savetrifile когда записывает транзакцию в tri вычисляет и записывает связанные деньги в файл linked.money вызывая функцию WriteFile. Связывается немного больше денег чем надо на всякий случай. Коэффициент 1,05

Код:

///////// Установки ///////////

TimeFrame      = 60;                  // таймфрейм в секундах.
Account         = "L01-00000F00";   // ваш аккаунт на бирже
Client         = "49501";            // код клиента
Lots            = 1;                     // сколько лотов желаете торговать
Otstup         = 2;                     // в процентах. Заявка будет выставлена хуже текущей цены на столько процентов
FileName      = "C:/Program Files/Quick/trans.tri"; // слэши прямые!!! имя файла с транзакциями для квика
money       = 100000;          // денег для торговли

dir = 0;



////////// Функции //////////
function ReadFile() {
  fh = fopen( "linked.money", "r");
  if( fh ) {
    p = fgets( fh );
    p = StrToNum(p);
  }
  else {
    fh = fopen( "linked.money", "w");
    fputs( "0", fh);
    p = 0;
  }
  fclose( fh );

  return p;
}

procedure WriteFile( q ) {
  fh = fopen( "linked.money", "w");
  fputs( NumToStr( q, 1.0, False ), fh);
  fclose( fh );
}


linkedMoney = ReadFile();


////////// Правила системы ///////////////


Buy =  Cross(C, MA(C, 10));
Sell = Cross(MA(C, 10), C);
Short = Sell;
Cover = Buy;


//////////////////////////////////////////

Equity(1, 0);

Buy = LastValue(Ref(Buy, -1));
Sell = LastValue(Ref(Sell, -1));
Short = LastValue(Ref(Short, -1));
Cover = LastValue(Ref(Cover, -1));


//////////// Формируем транзакцию.//////////////
////////////////////////////////////////////////
//////// !!!!СЮДА РУКАМИ НЕ ЛАЗИТЬ!!!! /////////
////////////////////////////////////////////////

Classcode = GroupID(1);
if(TickSize == 0)
{
   PopupWindow( "Не задан размер тика значение TickSize", "ошибка", timeout = 5, left = -1, top = -1 );
}
else
{
   Otstup = round(LastValue(C)*Otstup/100/TickSize)*TickSize;
   form = (1 + 0.1 * abs(floor(IIf(log10(TickSize)>0, 0, log10(TickSize)))));
}

procedure savetrifile(stransid, sstr, qqq)
{
   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);
               WriteFile( qqq * LastValue(C)*1.05*Lots + linkedMoney);
            }
      }
}


function makeandsave(sOper, sprice, qq)
{
   CCS="";
   if (Client != "")  CCS="CLIENT_CODE="+Client+";";

   transid = "TRANS_ID="   +FullName()+LastValue(TimeNum())+dir+"; ";

   str = transid   +
   "PRICE="         + NumToStr(sprice, format = form, separator=False)+"; " +
   "QUANTITY="      + NumToStr(Lots, format = 1.0, separator=False)+"; " +
   "OPERATION="   + sOper+"; " +
   "CLASSCODE="   + Classcode+"; " +
   "ACTION="         + "NEW_ORDER; " +
   "TYPE="            + "L; " +
   "SECCODE="      + Name()+"; " +
   "ACCOUNT="      + Account+"; " +
   CCS;

   savetrifile(transid, str, qq);
}

if (TimeFrame == Interval() & FullName() != "")
{
   if(Buy AND (money - linkedMoney) > LastValue(C)*1.1*Lots);
   {
      price = Close[BarCount-1] + Otstup;
      dir = "1";
      makeandsave("B", price, 1);
   }
   if(Sell)
   {
      price = Close[BarCount-1] - Otstup;
      dir = "2";
      makeandsave("S", price, -1);
   }
   if(Short AND (money - linkedMoney) > LastValue(C)*1.1*Lots)
   {
      price = Close[BarCount-1] - Otstup;
      dir = "3";
      makeandsave("S", price, 1);
   }
   if(Cover)
   {
      price = Close[BarCount-1] + Otstup;
      dir = "4";
      makeandsave("B", price, -1);
   }

}
else if (TimeFrame != Interval())
   PopupWindow( "Не соответствует временной интервал в настройках АА и в коде",
      "ошибка", timeout = 5, left = -1, top = -1 );
else
   PopupWindow( "Не задан двузначный номер в поле FullName", "ошибка", timeout = 15, left = -1, top = -1 );

//// mehanizator (c) 2004, http://www.russian-trader.ru
//// 000 (c) 2008, http://www.amisite.ru

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen