ROBOTRADING - Форум по автоматизированной и ручной торговле на финансовых рынках.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Игрушка - торговля руками в тестере

Сообщений 1 страница 16 из 16

1

Продолжение темы с mql4 форума...

Исправил ошибки...
И кое-что добавил.

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

А продолжение здесь...Вот новый файл...

0

2

спасибо за игрушку - есть пару вопросов - как выставить ТР и SL? - как задать лот? - или это просто игрушка для тестера?

0

3

Выделяем линию либо открытого ордера либо отложенного, и копируем ее в то место где надо поставить их... Типа для sell выше будет SL...

0

4

отлично - осталось только с лотом разобраться - % от свободных средств с учетом SL - и можна будет попробывать на реале

0

5

Не!  Ребята... Для того чтобы эта игрушка работала на реале, надо чтобы псевдо-отложники, ктороые применяются в этом эксп. При возможности их установить в виде ральных отложников преобразовывались в реальные. Так-же точно и с стопами и лимитам... ( В русском варианте SL и TP ) ... Этот эксп. закрывает и открывает ордера по тому уровню Ask и Bid которые пришли к нему от сервера... Но сервер при резком движении цены будет давать ошибку, так как просткальзывание стоит 0... Ошибка называется "старые цены"... Вообщем если кому надо для реала, то надо его еще доработать... Но я пас. Мне нужен был только для работы в тестере ручками. Так как у меня нет не ручной стратегии. Ну тоесть только ручные. Автомата мне ... ( хм...причем поверьте, я супер программист) ... мне сделать так и не удалось. Ну нельзя его сделать. На мой взгляд, с теми котироваками ( с пропусками и без выходных ) и без тиков... Ни не сделать, нормальный автомат... Можно только сделать пипсовщик.

Поверьте у меня еще есть штук пять "супер" ( ну... пусть не супер, но совершенно не известные никому индикатры, и генерторы сигналов) и тем не менее, сделать приемлимый для меня автомат мне не удалось... К этому автомату нужно прикрутить фундаментальный анализ, а это не по тестируешь... в тестере. Да вообще мало рально. Я могу только опираясь на свои глаза, которые видели много ситуаций - предсказать, как например можно тракотовать тот или иной сигнал и индикатор.

Не ищете филосовский камень его нет. Были люди, в огромном количестве, которые уже искали... И не нащли... Ну нету его. Нет великой тайны рынка... Есть понятное движение...  И есть понимание что если такой-то индиктор так-то считается, то его можно использовать как опору...

0

6

Zet1 написал(а):

отлично - осталось только

Да кстати, поставил я его на демо... Отлично блин пашет...  :)) даже и не ожидал....

Чтобы было лучше работать, и понятнее было -  поставьте в свойствах графика "показывать описание обьектов"  и будет вообще пэсн... !

Да кстати, вот ловите новый - кое-что добавил...  FXCM.mq4

0

7

MProgrammer написал(а):

Да кстати, вот ловите новый - кое-что добавил

Пока торгую, правлю, его под реал потихоньку...

Сделал :

1) Праметр время начала работы... Ставим например будущее время, и до этого времени експ. не работает.
2) Сделал поддяжку вертикальных линий... Ну чтобы компенсировать пропуски баров...
3) Сделал удаление отложников... Ну то есть удалил отложник, удаляются и его стопы и лимиты. Раньше удаление было только для открытых ордеров.
4) Сделал удобную возможность переустановки лимитов и стопов... Теперь вместо того чтобы искать стопы/лимиты соотвествующие ордеру, просто берете и ставите заново. Все лимиты будут перставлены.

FXCM Ver 3.0

0

8

попробовал на демо - давай дорабатывай, а то вещица нужная, чего дразнить трудовой народ? :)
1- ставим отложенник - то пусть он и выставляется в ордерах
2- ТР и SL- тоже самое
3- лот само собой нужен
если работать отложниками - то проскальзывание пх
Ждем и надеемся - а то есть у меня автограф - то там запутался - без стограмм не разберешь...

0

9

Zet1 написал(а):

давай дорабатывай

Да будет настроение доработаю... :))

Давай пробуй... торгуй на демке пока. :))

Заметил страннуй "фичу" в виде "баг"  - при выбирании по прибыли ( а это должно быть в 90% ) всегды закрывает лучше чем с обычным стопом... Типа по низу при продаже...

0

10

MProgrammer написал(а):

Да будет настроение доработаю

Ну вот, ващще хрень суперская получилась - блин вааще одни-в-одни как в FXCM-е ... Даже стопы и лимиты не правильно переставлять не дает. И быствее должна быть...

Вообщем пробуйте,  интересная штука. Удобная...

FXCM v4.0

0

11

Я со злости влез в код и попробовал увеличить функциональность - уверен, многим нужные добавки

1 - лот 0,01 - чтоб на центовых счетах играть
2 - риск

так как я не программист - то больше сделать не смог - будем ждать хорошего настроения адмирала

назовем FXCM v4_1

надеюсь за самодеятельность в баню не пошлют...

Код:
// Версия №4 ноль... один 
#property copyright "Программер... И чтобы эта, чтобы авторство райтили"
#property link      ""

extern string StartTime="2008.12.03 04:00";
extern double lot = 0.01;
extern bool MoneyManagement = False;
extern int Risk = 0;

int timetostart=0;

string Sells[100];
string SellsLimits[100];
string SellsStops[100];

string Buys[100];
string BuysLimits[100];
string BuysStops[100];

string SellTemplateName= "SellLine";
string BuyTemplateName = "BuyLine";

string SellButtonName  = "SellButton";
string BuyButtonName   = "BuyButton";

int init()
{

 if (MoneyManagement)
   {
      if (Risk<1 || Risk>100)
      {
         Comment("с таким риском никак");
         return(0);
      }
      else
      {
         lot=MathFloor((AccountFreeMargin()*AccountLeverage()*Risk*Point*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)*MarketInfo(Symbol(),MODE_MINLOT)))*MarketInfo(Symbol(),MODE_MINLOT);
      }
   }
   timetostart=StrToTime(StartTime);

   if ( ObjectCreate ( SellTemplateName, OBJ_HLINE, 0,    0, Ask+100*Point ) ){
      
      ObjectSet( SellTemplateName, OBJPROP_COLOR, Red );
      ObjectSet( SellTemplateName, OBJPROP_STYLE, STYLE_DASH );
      ObjectSet( SellTemplateName,  OBJPROP_WIDTH,1);
      ObjectSet( SellTemplateName,  OBJPROP_BACK,true);
      ObjectSetText (SellTemplateName, SellTemplateName+"TEMPLATE",0 );
   }
   
   if ( ObjectCreate ( BuyTemplateName, OBJ_HLINE, 0,    0, Ask+70*Point ) ){
      
      ObjectSet( BuyTemplateName, OBJPROP_COLOR, Blue );
      ObjectSet( BuyTemplateName, OBJPROP_STYLE, STYLE_DASH );
      ObjectSet( BuyTemplateName,  OBJPROP_WIDTH,1);
      ObjectSet( BuyTemplateName,  OBJPROP_BACK,true);
      ObjectSetText (BuyTemplateName, BuyTemplateName+"TEMPLATE",0 );
   }
   
   if ( ObjectCreate ( SellButtonName, OBJ_RECTANGLE, 0, Time[100], Ask+120*Point, Time[50], Ask+60*Point ) ){
      
      ObjectSet( SellButtonName, OBJPROP_COLOR, Red );
      ObjectSet( SellButtonName, OBJPROP_STYLE, STYLE_DASH );
      ObjectSet( SellButtonName,  OBJPROP_WIDTH,1);
      ObjectSet( SellButtonName,  OBJPROP_BACK,true);
      ObjectSetText (SellButtonName, SellButtonName+"TEMPLATE",0);
   }
   
   if ( ObjectCreate ( BuyButtonName, OBJ_RECTANGLE, 0, Time[125], Ask+40*Point, Time[75], Ask-20*Point ) ){
      
      ObjectSet( BuyButtonName, OBJPROP_COLOR, Blue );
      ObjectSet( BuyButtonName, OBJPROP_STYLE, STYLE_DASH );
      ObjectSet( BuyButtonName,  OBJPROP_WIDTH,1);
      ObjectSet( BuyButtonName,  OBJPROP_BACK,true);
      ObjectSetText (BuyButtonName, BuyButtonName+"TEMPLATE",0 );
   }
  
   
   
   return(0);
}
int deinit()
{
   return(0);
}
void RenameHLine ( string n, string nn )
{
   color c=ObjectGet ( n,OBJPROP_COLOR  );
     
   if ( GetLastError() != 0 )
      return ;  
     
   ObjectCreate ( nn,  OBJ_HLINE, 0, 0, ObjectGet ( n, OBJPROP_PRICE1 ) );
     
   ObjectSet( nn, OBJPROP_COLOR, c );
   ObjectSet( nn, OBJPROP_STYLE, ObjectGet ( n,OBJPROP_STYLE  ) );
   ObjectSet( nn,  OBJPROP_WIDTH,ObjectGet ( n, OBJPROP_WIDTH ));
   ObjectSet( nn,  OBJPROP_BACK,ObjectGet ( n, OBJPROP_BACK ));
   ObjectSetText (nn, nn+"$$$$",0 );
     
   ObjectDelete ( n );
     
  
}
int Det ( )
{
   int t=ObjectsTotal ( );
   string n,d;
   int code;
   double p;
   for ( int i=t-1; i>=0; i-- ){
      n=ObjectName(i);
       
      d=ObjectDescription(n);
     
      if ( StringFind ( d, "TEMPLATE" ) < 0 )
         continue;  
      
      if ( n+"TEMPLATE" != d ){
         
         if ( ! ObjectSetText ( n, "", 0 ) )
            continue;
         
         if ( StringFind(d,"Button") > 0 ){
            code = 1;
         }   
         else
            code = 0; 
         if ( StringFind(d,"Sell") >= 0 ){
            code = code | 2;
         }    
         string on,od;
         int ti;
         switch ( code ){
            case 0:  
                     p=ObjectGet(n,OBJPROP_PRICE1); 
                     on="BUY DELAY ORDER#"+TimeCurrent();
                     od=on+"$$$$";    
                     ObjectCreate ( on, OBJ_HLINE, 0, 0, p );
                     ObjectSet ( on, OBJPROP_COLOR, DimGray);
                     ObjectSet ( on, OBJPROP_STYLE,STYLE_DOT);
                     ObjectSet ( on, OBJPROP_WIDTH,1);
                     ObjectSet ( on, OBJPROP_BACK,false);
                     ObjectSetText(on, od, 0);
                     break;
            case 1:  
                     ti=OrderSend(Symbol(), OP_BUY, lot, Ask, 0, 0, 0 );
                     on="BUY ORDER#"+ti;
                     od=on+"$$$$";    
                     ObjectCreate ( on, OBJ_HLINE, 0, 0, Ask );
                     ObjectSet ( on, OBJPROP_COLOR, Blue);
                     ObjectSet ( on, OBJPROP_STYLE,STYLE_DOT);
                     ObjectSet ( on, OBJPROP_WIDTH,1);
                     ObjectSet ( on, OBJPROP_BACK,false);
                     ObjectSetText(on, od, 0);
                     break;
            case 2: 
                     p=ObjectGet(n,OBJPROP_PRICE1); 
                     on="SELL DELAY ORDER#"+TimeCurrent();
                     od=on+"$$$$";    
                     ObjectCreate ( on, OBJ_HLINE, 0, 0, p );
                     ObjectSet ( on, OBJPROP_COLOR, DimGray);
                     ObjectSet ( on, OBJPROP_STYLE,STYLE_DOT);
                     ObjectSet ( on, OBJPROP_WIDTH,1);
                     ObjectSet ( on, OBJPROP_BACK,false);
                     ObjectSetText(on, od, 0);
                     break;     
            case 3:  
                   
                     ti=OrderSend(Symbol(), OP_SELL, lot, Bid, 0, 0, 0);
                     on="SELL ORDER#"+ti;
                     od=on+"$$$$";    
                     ObjectCreate ( on, OBJ_HLINE, 0, 0, Bid );
                     ObjectSet ( on, OBJPROP_COLOR, DarkGoldenrod);
                     ObjectSet ( on, OBJPROP_STYLE,STYLE_DOT);
                     ObjectSet ( on, OBJPROP_WIDTH,1);
                     ObjectSet ( on, OBJPROP_BACK,false);
                     ObjectSetText(on, od, 0);
                     break;
         }
         
         ObjectDelete ( n );
      }
   }
}  

string _BUY="BUY"; int _BUY_LEN=3;
string _SELL="SELL";int _SELL_LEN=4;
string _TP_BUY="TP BUY";int _TP_BUY_LEN=6;
string _SL_BUY="SL BUY";int _SL_BUY_LEN=6;
string _TP_SELL="TP SELL";int _TP_SELL_LEN=7;
string _SL_SELL="SL SELL";int _SL_SELL_LEN=7;

string _SL_SELL_ORDER="SL SELL ORDER";int _SL_SELL_ORDER_LEN=13;
string _TP_SELL_ORDER="TP SELL ORDER";int _TP_SELL_ORDER_LEN=13;

string _SL_BUY_ORDER="SL BUY ORDER";int _SL_BUY_ORDER_LEN=12;
string _TP_BUY_ORDER="TP BUY ORDER";int _TP_BUY_ORDER_LEN=12;

string _SELL_DELAY="SELL DELAY";int _SELL_DELAY_LEN=10;
string _BUY_DELAY="BUY DELAY";int _BUY_DELAY_LEN=10;


int DetControl ( )
{
   int t=ObjectsTotal ( );
   
   string n,d;
   
   int code;
   
   double p,newp;
   
   string on,od;
   
   color c;
   
   for ( int i=t-1; i>=0; i-- ){
   
      n=ObjectName(i);    
      d=ObjectDescription(n);
     
      int e=StringFind ( d, "$$$$" );
      if ( e < 0 )
         continue;  
      d= StringSubstr ( d, 0, e )  ;
      if ( n == d )
         continue;
      
      if ( ! ObjectSetText ( n, "", 0 ) )
         continue;
            
      newp=ObjectGet(n,OBJPROP_PRICE1); 
      ObjectDelete ( n );
      
      n = d;
      p = ObjectGet ( n, OBJPROP_PRICE1 ); 
      
      
      if ( StringSubstr ( d,0, _SELL_LEN ) == _SELL  ){
         if ( newp > p ){
            on= "SL"+" "+n;
            c=Red;
         }   
         else {
            if ( newp < p ){
               on= "TP"+" "+n;
               c=SteelBlue;  
            }
         }
      }  
      else {
       
         if ( StringSubstr(d,0,_BUY_LEN) == _BUY ) {
            if ( newp > p ){
               on= "TP"+" "+n;
               c=SteelBlue;
            }   
            else {
               if ( newp < p ){
                  on= "SL"+" "+n;
                  c=Red;  
               }
            }
         }
         else
            continue;   
      }
      // 
      if ( ! ObjectMove(on,0,Time[0],newp ) ){
         ObjectCreate ( on, OBJ_HLINE, 0, 0, newp );
         ObjectSet ( on, OBJPROP_COLOR, c);
         ObjectSet ( on, OBJPROP_STYLE,STYLE_DOT);
         ObjectSet ( on, OBJPROP_WIDTH,1);
         ObjectSet ( on, OBJPROP_BACK,false);
        // ObjectSetText(on, od+newp, 0);
      }
      ObjectSetText(on, on+"$$$$"+newp, 0);
   }
}

int CloseOrder ( string n, double p, bool sl )// SL SELL OREDER#3
{
   int ti= StrToInteger ( StringSubstr (n,StringFind(n,"#")+1) );// SL SELL ORDER#2
   OrderSelect ( ti, SELECT_BY_TICKET );
   OrderClose ( ti, OrderLots(), p, 0 );
   ObjectDelete(n);
   n=StringSubstr(n,3);
   ObjectDelete ( n );
   if ( sl ) 
      ObjectDelete ( "TP "+n );
   else
      ObjectDelete ( "SL "+n );
   
}

void DetMove ( )
{
   for ( int i=ObjectsTotal()-1; i>=0; i--){
     
      string n=ObjectName(i);
      string d=ObjectDescription(n);
     
      int e=StringFind ( d, "$$$$" );
      if ( e < 0 )
         continue;  
      
      if ( n != StringSubstr(d,0,e) )
         continue;
      
      if ( StringLen(d) - (e+4) <= 0 )
         continue;   
         
      double p = ObjectGet ( n, OBJPROP_PRICE1 ); 
      double oldp=StrToDouble(StringSubstr(d,e+4));
      
      if ( p == oldp )
         continue;     
      
      d=StringSubstr(d,0,e);
      
  //    Print("n:",n,",d:",d,",",p,",",oldp);
      
      
      bool moveback=false;
       
      if      ( StringSubstr(d, 0, _TP_BUY_LEN) == _TP_BUY ){
         if ( p <= Ask )
            moveback=true;   
      }
      else if ( StringSubstr(d,0,_SL_BUY_LEN) == _SL_BUY ){
         if ( p >= Ask )
            moveback=true;
      } 
      else if ( StringSubstr(d,0,_TP_SELL_LEN) ==  _TP_SELL ) {
         if ( p >= Bid )
            moveback=true;
      }
      else if ( StringSubstr(d,0,_SL_SELL_LEN) ==_SL_SELL ) {
         if ( p <= Bid )
            moveback=true; 
      }    
      else if ( StringSubstr(d,0,_SELL_LEN) == _SELL ) {
            moveback=true; 
      } 
      else if ( StringSubstr(d,0,_BUY_LEN) == _BUY ) {
            moveback=true; 
      }
      if ( moveback ){
         ObjectMove(n,0,Time[0],oldp);
         Print("Error: Ну так нафиг нельзя ставить!");
      }   
      else
         ObjectSetText(n,d+"$$$$"+p);   
   }      
}

void DetDel ( )
{
   int t;
   int i;
   string n;
   
   for ( int j=OrdersTotal()-1; j>=0; j--){
      OrderSelect ( j,SELECT_BY_POS );
      
         
      if ( OrderType() == OP_BUY ){
         if ( ObjectFind("BUY ORDER#"+OrderTicket()) < 0 ){
            ObjectDelete("SL BUY ORDER#"+OrderTicket());
            ObjectDelete("TP BUY ORDER#"+OrderTicket());
            OrderClose ( OrderTicket(), OrderLots(), Bid, 0 );
         }
      }
      else {
         if ( OrderType() == OP_SELL ){
            if ( ObjectFind("SELL ORDER#"+OrderTicket()) < 0 ){// SL SELL ORDER#3
               ObjectDelete("SL SELL ORDER#"+OrderTicket());
               ObjectDelete("TP SELL ORDER#"+OrderTicket());
               OrderClose ( OrderTicket(), OrderLots(), Ask, 0  );
            }
         }
      }  
    }   
      

   for ( i=ObjectsTotal()-1; i>=0; i--){
      n=ObjectName(i);
            
      if ( StringFind ( n,"DELAY" ) < 0 )
         continue;
      if ( StringFind ( n,"SL" ) != 0 && StringFind ( n,"TP" ) != 0 )
         continue;
            // SL!TP * DELAY ORDER#
      if ( ObjectFind ( StringSubstr(n,3) ) < 0 ){ // SL SELL DELAY OREDR#2 
         ObjectDelete(n);
      }
   }            
}
void ButtonMove ( )
{
 
   double pm=WindowPriceMax();
  
   
   ObjectMove(SellTemplateName,0,Time[0],pm-10*Point);
   ObjectMove(BuyTemplateName,0,Time[0],pm-20*Point);
   
   ObjectMove(BuyButtonName,0,Time[200],pm-30*Point); 
   ObjectMove(BuyButtonName,1,Time[180], pm-50*Point); 
  
   ObjectMove(SellButtonName,0,Time[200],pm-55*Point); 
   ObjectMove(SellButtonName,1,Time[180], pm-75*Point); 
   
   
}

void TimeLineMove ( )
{
   
   for ( int i=ObjectsTotal()-1; i>=0; i--){
      string n=ObjectName(i);
      if ( ObjectType(n) == OBJ_VLINE ){
         datetime t = ObjectGet ( n, OBJPROP_TIME1 );
         if ( t > TimeCurrent() )
            ObjectSet(n,OBJPROP_TIME1,t);
      }               
      
   }  
} 

int start()
{
   
   if ( TimeCurrent() < timetostart )
      return;
   
   static datetime zt=0;
   
   if ( zt != Time[0] ){
      zt= Time[0];
      ButtonMove();   
      TimeLineMove();
      Comment("B:",AccountBalance(),",E:",AccountEquity(),",F:",AccountFreeMargin());
   }   
  
   Det();
   
   DetControl();
   DetMove();
   DetDel();
   
   static double last_bid=0, last_ask=0;
   
   if ( last_bid != 0 ){
   
      int t=ObjectsTotal();
      
      int ti,i;
      
      string n,d,nn;
      for( i=t-1; i>=0; i-- ){
      
         n=ObjectName(i);    
         d=ObjectDescription(n);  
         
         
         if ( StringFind ( d, "$$$$" ) < 0 )
            continue;
         
         double p = ObjectGet ( n, OBJPROP_PRICE1 ); 
         
         if (StringSubstr(d,0, _SELL_DELAY_LEN ) == _SELL_DELAY ){ 
            if ( (last_bid <= p && Bid > p) || (last_bid >= p && Bid < p) ){
               ti=OrderSend(Symbol(), OP_SELL, lot, Bid, 0, 0, 0);
               nn="SELL ORDER#"+ti;
               RenameHLine ( n, nn );// was SELL DELAY OREDER#763248762
               RenameHLine ( "SL "+n, "SL "+nn);// SL   DELAY OREDER#387632468234 
               RenameHLine ( "TP "+n, "TP "+nn);
            } 
         }
         else if ( StringSubstr(d,0,_BUY_DELAY_LEN) == _BUY_DELAY ) {
            if ( (last_ask >= p && Ask < p) || (last_ask <= p && Ask > p) ){
               ti=OrderSend(Symbol(), OP_BUY, lot, Ask, 0, 0, 0);  
               nn="BUY ORDER#"+ti;
               RenameHLine ( n, nn );// was SELL DELAY OREDER#763248762
               RenameHLine ( "SL "+n, "SL "+nn);// SL   DELAY OREDER#387632468234 
               RenameHLine ( "TP "+n, "TP "+nn); 
            }     
         }
         else if ( StringSubstr(d,0,_SL_SELL_ORDER_LEN) == _SL_SELL_ORDER ){
            if ( Ask > p )
               CloseOrder(n,Ask,true);
         }
         else if ( StringSubstr(d,0,_SL_BUY_ORDER_LEN) == _SL_BUY_ORDER ){
            if ( Bid < p )
               CloseOrder(n,Bid,true);
         }
         else if ( StringSubstr(d,0,_TP_SELL_ORDER_LEN) == _TP_SELL_ORDER ){
            if (  Ask < p )
               CloseOrder(n,Ask,false);
         }
         else if ( StringSubstr(d,0,_TP_BUY_ORDER_LEN) == _TP_BUY_ORDER){ 
            if ( Bid > p )
               CloseOrder(n,Bid,false);
         }            
      }
   }
 
   last_bid=Bid;
   last_ask=Ask;
   return(0);
  }

0

12

Zet1 написал(а):

надеюсь за самодеятельность в баню не пошлют...

Воспользуюсь случаем :))  и выскажусь - про баны...   

:)) Я ПРИНЦИПИАЛЬНЫЙ противник банов. Для меня лично это означает "побег с поля боя"...

0

13

Надеюсь на готовую игрушку - сегодня опробовал на микро - неплохо - но доработать надо

0

14

Осторожно, с ним... Он может закрыть ордера которые на открывал... Там магик надо еще приделать... И обязательно пользоваться шаблонами... Чтобы линии которые были и соответствовали ордерам не изчезали, а то он подумает, что линию удалили и надо ордер закрывать...

Магик приделаю сегодня.

И еще... Там можно, если вы заматили, ставить какбы сразу пачку ордеров... Ну просто делается сразу несколько копий линий, и по приходу тика они переделываются в отложенники. Так же можно сразу например продать три обьема... Для этого надо просто сделать три копии квадратика.

Но пока там есть еще некоторые ошибки и лучше сразу пачками не ставить... :)) Лучше пока по одному... Сегодня размерусь, вот только сделаю растановку ордеров, и займусь...

0

15

Да кстати буду еще далать :

-- прибыль дня... Прибыль убыток с начала дня.
-- подпись на линии ордера прибыли но нему в пунктах
-- Уровень чистой позиции.

Да кстати, что касается обьема - то я считаю ( ИМХО) что бывают только фиктированные обьемы... Соответсвтующие размеру депо. Ну скажем для 1000 долларов это 0.1 при плече 100 к 1... Ну и тд.

0

16

и чтоб лимитники реально ставились

0