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



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

СообщениеДобавлено: Пн Июл 02, 2012 8:57 pm Ответить с цитатой Вернуться к началу

Код:
Buy = 0;

MA5=Ref(MA(C,5),-1);

selllevel=0;
//=======LONG======
for( i = 1; i < BarCount; i++)
{
   if (C[i] > MA5[i] & pos ==0)
      {
         Buy[i] = 1;
         BuyPrice[i] = С[i];
         Bbuyprice = BuyPrice[i];
         pos = 1;
         k = MA5[i]-C[i];
         selllevel = aaa(k,Bbuyprice);
      }
   if (pos==1 & C[i] < selllevel)
      {
         Sell[i] = 1;
         SellPrice[i] = selllevel;
      }
}
   function aaa (k, Bbuyprice);
   {
      rezult=Bbuyprice-k;
   return rezult;
   }


сил уже нет - как только не пробовал - подскажите как использовать функцию
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Чначало описаниефункции, потом её вызов
Код:

// описание функции
function aaa (k, Bbuyprice);
{
    rezult = Bbuyprice-k;
    return rezult;
}

Buy = 0;

MA5=Ref(MA(C,5),-1);

selllevel=0;
//=======LONG======
for( i = 1; i < BarCount; i++)
{
   if (C[i] > MA5[i] & pos ==0)
      {
         Buy[i] = 1;
         BuyPrice[i] = С[i];
         Bbuyprice = BuyPrice[i];
         pos = 1;
         k = MA5[i]-C[i];
         selllevel = aaa(k,Bbuyprice); // вызов функции
      }
   if (pos==1 & C[i] < selllevel)
   {
      Sell[i] = 1;
      SellPrice[i] = selllevel;
   }
}

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



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

СообщениеДобавлено: Ср Июл 04, 2012 8:54 pm Ответить с цитатой Вернуться к началу

"pos" превратился в массив - хотя я хочу использовать ее как переменную - есть ли возможность объявлять переменные
Посмотреть профиль Отправить личное сообщение
ild.w



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

СообщениеДобавлено: Ср Июл 04, 2012 9:04 pm Ответить с цитатой Вернуться к началу

Код:
// описание функции
 function aaa (k, Bbuyprice);
 {
     rezult = Bbuyprice-k;
     return rezult;
 }

 Buy = 0;

 MA5=Ref(MA(C,5),-1);
pos = 0;
 selllevel=0;
 //=======LONG======
 for( i = 1; i < BarCount; i++)
 {
    if (C[i] > MA5[i] & pos ==0)
       {
          Buy[i] = 1;
          BuyPrice[i] = С[i];
          Bbuyprice = BuyPrice[i];
          pos = 1;
          k = MA5[i]-C[i];
          selllevel = aaa(k,Bbuyprice); // вызов функции
       }
    if (pos==1 & C[i] < selllevel)
    {
       Sell[i] = 1;
       SellPrice[i] = selllevel;
    }
 }


после присвоения 1 pos становиться массивом и на 2 условии " if (pos==1 & C[i] < selllevel)" выходит ошибка связанная с циклом
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Июл 04, 2012 10:20 pm Ответить с цитатой Вернуться к началу

Ну давай смотреть.
тут
Код:

function aaa (k, Bbuyprice);

";" не надо

тут
Код:

BuyPrice[i] = С[i];

надо не русскую с а английскую C

тут


Код:

    if (pos==1 & C[i] < selllevel)
    {
       Sell[i] = 1;
       SellPrice[i] = selllevel;
    }

надо обнулить позиуию

В общем должно быть так
Код:

SetBarsRequired(sbrAll, sbrAll);

function aaa(k, Bbuyprice)
{
   rezult = Bbuyprice - k;
   return rezult;
}

MA5 = Ref(MA(C, 5), -1);
pos = 0;
selllevel = 0;

//=======LONG======
for( i = 1; i < BarCount; i++)
{
   if(C[i] > MA5[i] AND pos == 0)
   {
      Buy[i] = 1;
      BuyPrice[i] = C[i];
      Bbuyprice = BuyPrice[i];
      pos = 1;
      k = MA5[i] - C[i];
      selllevel = aaa(k, Bbuyprice);
   }
   else if(pos == 1 AND L[i] < selllevel)
   {
      Sell[i] = 1;
      pos = 0;
      SellPrice[i] = selllevel;
   }
}

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



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

СообщениеДобавлено: Ср Июл 04, 2012 10:47 pm Ответить с цитатой Вернуться к началу

Код:

function sellalllevel(pos1long, pos2long, pos3long, pos4long, step, selllevel)
       {
         if (pos1long==False) rezult=selllevel;
         if (pos1long==True) rezult=selllevel;
         if (pos2long==True) rezult=selllevel+step;
         if (pos3long==True) rezult=selllevel+step+step;
         if (pos4long==True) rezult=selllevel+step+step+step;
          return rezult;
       }

//coverlevel=Ref(HHV(H,5),-1);


//SetPositionSize(1,4);                            //Торгуемое количество лотов
SetPositionSize(4000,1);                      //Торгуемое количество денег
SetTradeDelays( 0, 0, 0, 0 );                    //Задержка торгов
SetOption("InitialEquity", 50000);              //Начальный депозит
SetOption("AllowSameBarExit", True);             //Запрет выхода на баре входа
SetOption("ActivateStopsImmediately", True);     //Немедленная активация стопов
SetOption("AllowPositionShrinking", True); 
//Разрешить окрывать позицию размером меньше заданного (при недостатке средств)
SetOption("FuturesMode", False);                  //Режим маржинальной торговли
//SetOption("CommissionMode", 2);                  //Режим комиссии
//SetOption("CommissionAmount",(KomBir+KomBro)/2); //Величина комиссии
RoundLotSize=1;
SetOption( "PriceBoundChecking", True);

buyunit1level=Ref(HHV(H,20),-1);
ATR10=Ref(ATR(10),-1);


Buy = 0;
Short = 0;
pos1long=False; pos2long=False; pos3long=False; pos4long=False;
step=0;
buyunit2level=0; buyunit3level=0; buyunit4level=0;
selllevel=0;
//shortunit2level=0; shortunit3level=0; shortunit4level=0;


//=======LONG======
for( i = 1; i < BarCount; i++)
{
   if (H[i]> buyunit1level[i] AND (pos1long==False OR pos2long==False OR pos3long==False OR pos4long==False))
      {
         
         Buy[i] = 1;
         BuyPrice[i] = buyunit1level[i]; //+ 5*TickSize;
         if (O[i]>buyunit1level[i]) BuyPrice[i] = O[i];
         
         selllevel=buyunit1level[i]-2*ATR10;
         step=(buyunit1level[i]-selllevel)/2;
         buyunit2level=buyunit1level[i]+step;
         buyunit3level=buyunit1level[i]+step+step;
         buyunit4level=buyunit1level[i]+step+step+step;
         pos1long=True;
      }
   //================
   if (H[i]> buyunit2level AND pos1long==True)
   {
      Buy[i] = sigScaleIn;
      BuyPrice[i] = buyunit2level; //+ 5*TickSize;
      if (O[i]>buyunit2level) BuyPrice[i] = O[i];
      pos2long=True;
   }
   if (H[i]> buyunit3level AND pos2long==True)
   {
      Buy[i] = sigScaleIn;
      BuyPrice[i] = buyunit3level ; //+ 5*TickSize;
      if (O[i]>buyunit3level) BuyPrice[i] = O[i];
      pos3long=True;
   }
   if (H[i]> buyunit4level AND pos3long==True)
   {
      Buy[i] = sigScaleIn;
      BuyPrice[i] = buyunit4level ; //+ 5*TickSize;
      if (O[i]>buyunit4level) BuyPrice[i] = O[i];
      pos4long=True;
   }

   

//poss=pos;
   //================
   aaa = sellalllevel (pos1long, pos2long, pos3long, pos4long, step, selllevel);

   if (L[i]< aaa & (pos1long==True OR pos2long==True OR pos3long==True OR pos4long==True))
   {
         Sell[i] = 1;
         SellPrice[i] = aaa;                //  sellall_level;
         if (O[i]<aaa) SellPrice[i] = O[i]; //  sellall_level
         pos1long=False; pos2long=False; pos3long=False; pos4long=False;

   }
   /*else
   {
         Sell[i] = 0;
   }*/

}


вот такая простая система. вначале вместо pos1long использовал просто pos и присваивал этой переменной число. не пошло при условии if пишет Error 6. Condition in IF, WHILE, FOR statements has to be Numeric or Boolean type. You can not use array here, please use [] (array subscript operator) to access array elements
Поменял pos на логическую переменную pos1long. на текущий момент выходит таже ошибка - ругается на buyunit2level buyunit3level buyunit4level говорит что это массив -
ps желательно б конечно вернутся к pos=1,2 и тд - если конечно это реально
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Июл 05, 2012 12:05 am Ответить с цитатой Вернуться к началу

Вроде не ругается
Код:

function sellalllevel(fpos, fstep, fselllevel)
{
   if (fpos == 0) rezult = selllevel;
   else if (fpos == 1) rezult = fselllevel;
   else if (fpos == 2) rezult = fselllevel + fstep;
   else if (fpos == 3) rezult = fselllevel + fstep*2;
   else if (fpos == 4) rezult = fselllevel + fstep*3;

   return rezult;
}

SetPositionSize(4000, 1);
SetTradeDelays( 0, 0, 0, 0 );
SetOption("InitialEquity", 50000);
SetOption("AllowSameBarExit", True);
SetOption("AllowPositionShrinking", True); 
SetOption("FuturesMode", False);
RoundLotSize = 1;

buyunit1level = Ref(HHV(H, 20), -1);
ATR10 = Ref(ATR(10),-1);

Buy = Short = pos = step = 0;
buyunit2level = buyunit3level = buyunit4level = selllevel = 0;

//=======LONG======
for( i = 1; i < BarCount; i++)
{
   if(H[i] > buyunit1level[i] AND pos == 0)
   {
       Buy[i] = 1;
       BuyPrice[i] = buyunit1level[i]; //+ 5*TickSize;
       if (O[i] > buyunit1level[i])
          BuyPrice[i] = O[i];
       else
          BuyPrice[i] = buyunit1level[i];
           
       selllevel = buyunit1level[i] - 2*ATR10[i];
       step      = (buyunit1level[i] - selllevel)/2;
       buyunit2level = buyunit1level[i] + step;
       buyunit3level = buyunit1level[i] + step*2;
       buyunit4level = buyunit1level[i] + step*3;
 
       pos = 1;
    }
    //================
    else if(H[i] > buyunit2level AND pos == 1)
    {
       Buy[i] = sigScaleIn;
       if (O[i] > buyunit2level)
          BuyPrice[i] = O[i];
       else
          BuyPrice[i] = buyunit2level;

       pos = 2;
    }
    else if (H[i] > buyunit3level AND pos == 2)
    {
       Buy[i] = sigScaleIn;
       if (O[i] > buyunit3level)
          BuyPrice[i] = O[i];
       else
          BuyPrice[i] = buyunit3level;
       pos = 3;
    }
    else if (H[i] > buyunit4level AND pos == 3)
    {
       Buy[i] = sigScaleIn;
       if (O[i] > buyunit4level)
          BuyPrice[i] = O[i];
       else
          BuyPrice[i] = buyunit4level;
       pos == 4;
    }

    //================
    aaa = sellalllevel(pos, step, selllevel);

    if (L[i] < aaa & (pos > 0))
    {
       Sell[i] = 1;
       if (O[i] < aaa)
          SellPrice[i] = O[i];
       else
          SellPrice[i] = aaa;

       pos = 0;
    }
}

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



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

СообщениеДобавлено: Вт Июл 10, 2012 11:44 am Ответить с цитатой Вернуться к началу

Возникло еще несколько вопросов
на одной свече срабатывает только 1 условие sigScaleIn - так и задумано - или я что то не то сделал.
если на одной свече срабатывает sigScaleIn, а также сигнал на продажу - то Тестер сначала закрывает всю позицию - затем открывается на 1 sigScaleIn и поз. вместо закрытой становиться на 1 sigScaleIn в лонге

как обеспечить вход на 1-ой свече допустим по 3-м сигналам sigScaleIn, или сделать при каждом наступившем уровне добавления юнита выполнять полную продажу и закупку двойным лотом
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Ильдар писал(а):
Возникло еще несколько вопросов
на одной свече срабатывает только 1 условие sigScaleIn - так и задумано - или я что то не то сделал.

Так и задумано. Ной свече может быть только одна BuyPrce, а множественное добавление подрзумевает разные цены добавки.
Ильдар писал(а):

если на одной свече срабатывает sigScaleIn, а также сигнал на продажу - то Тестер сначала закрывает всю позицию - затем открывается на 1 sigScaleIn и поз. вместо закрытой становиться на 1 sigScaleIn в лонге

А как Ами может узнать что делать сперва?
Помниться Томашь писал, что в таком случае срабатывает худший вариант.
Ильдар писал(а):

как обеспечить вход на 1-ой свече допустим по 3-м сигналам sigScaleIn, или сделать при каждом наступившем уровне добавления юнита выполнять полную продажу и закупку двойным лотом

Никак. Вообще следует выбирать фрейм так, чтобы на одном баре был только один сигнал.

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen