Скачать MetaTrader 5

Надо чтобы стоп в пунктах был равен проценту от депо

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
DarkAngel
65
DarkAngel 2010.06.20 18:59 

Надо чтобы стоп в пунктах был равен проценту от депо и надо чтобы возвращало лот
// Не открывает сделки
if (LotsWayChoice==1) {
Lot=AccountFreeMargin()*StopPercent/100;
Lot=MathCeil(Lot/20/10);
}
return(Lot);
}


// фиксированный процент от депозита
if (LotsWayChoice==1) {
Lot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10;
}
return(Lot);
}

И как привести разницу цен в целое число?
Пример:
v=1.0400-1.0300
v=0.0100

Vladislav Andruschenko
93818
Vladislav Andruschenko 2010.06.20 19:03  

Надо чтобы стоп в пунктах был равен проценту от депо и надо чтобы возвращало лот

так стоп или лот?


И как привести разницу цен в целое число?


целое число это типо 1 2 или -1221312


Вы хотите избавится от дроби?

int c=v/Point;

hasayama
612
hasayama 2010.06.20 19:20  

Вот функция, которая принимает следующие параметры - тип позиции, риск и расстояние до стоп лосса.

Возвращает значение лота при котором в момент закрытия по указаному стоп лоссу будет просадка в риск % от депозита.

Надеюсь будет полезно.

double LotSize( int type, double LotRisk, int SL  )
{       
        double  lot_min         = MarketInfo( Symbol(), MODE_MINLOT  ); 
        double  lot_max         = MarketInfo( Symbol(), MODE_MAXLOT  ); 
        double  lot_step                = MarketInfo( Symbol(), MODE_LOTSTEP ); 
        double  lotcost         = MarketInfo( Symbol(), MODE_TICKVALUE );       
                
        double  lot                             = 0.0;
        double  dollarsPerPip   = 0.0;
        
        lot = AccountBalance()*LotRisk/100.0;
        dollarsPerPip = lot/SL;
                
        lot = NormalizeDouble( dollarsPerPip/lotcost, 2 );      
        
        lot = NormalizeDouble( lot / lot_step, 0 ) * lot_step;
        
        if ( lot < lot_min ) lot = lot_min;
        if ( lot > lot_max ) lot = lot_max;
        
        if ( AccountFreeMarginCheck( Symbol(), type, lot ) < 10 || GetLastError() == 134 ) 
        { 
                Alert ( "Impossible to open position with lot = ", DoubleToStr( lot, 2 ), ". Not enough money." );
                return(-1);
        }

        return( lot );
}
DarkAngel
65
DarkAngel 2010.06.21 08:17  
1)И как привести разницу цен в целое число? Пример: v=1.0400-1.0300 v=0.0100 Надо чтобы v возвращало не 0.0100 а 100!!! 2)И надо решение чтобы выдавало лот из расчёта стоп равен проценту от депо Тоесть фиксированный стоп 5% а пункты выставляются на основе максимумумов и минимумов. Пример №1: Если стоп равен 20 пунктам то потери 5% от депо и возвращение лота которое нужно для сделки Пример №2: Если стоп равен 50 пунктам то потери 5% от депо и возвращение лота которое нужно для сделки Свои наработки: // Не открывает сделки(Мне надо правильное решение только этого!, не переделывать!) if (LotsWayChoice==1) { //выбор по проценту от депо Lot=AccountFreeMargin()*StopPercent/100; //Лот=Свободные средства*5(процент от депо-потери)/100 Lot=MathCeil(Lot/20/10); //Лот=MathCeil(Lot/5(процент от депо/10) } return(Lot); //Возвращение Лота } *надо доработать чтобы возвращало нормальный лот // фиксированный процент от депозита if (LotsWayChoice==1) { Lot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10; //использование процента от депо } return(Lot); } ***Вроде понятно обьяснил
Vladislav Andruschenko
93818
Vladislav Andruschenko 2010.06.21 09:08  

я Вам понятно обьяснил:


1)И как привести разницу цен в целое число? Пример: v=1.0400-1.0300 v=0.0100 Надо чтобы v возвращало не 0.0100 а 100!!!

int c=v/Point;
o_o
Модератор
23861
o_o 2010.06.21 09:09  
cmex:
1)И как привести разницу цен в целое число? Пример: v=1.0400-1.0300 v=0.0100 Надо чтобы v возвращало не 0.0100 а 100!!!
разделить на Point

2)И надо решение чтобы выдавало лот из расчёта стоп равен проценту от депо Тоесть фиксированный стоп 5% а пункты выставляются на основе максимумумов и минимумов. Пример №1: Если стоп равен 20 пунктам то потери 5% от депо и возвращение лота которое нужно для сделки Пример №2: Если стоп равен 50 пунктам то потери 5% от депо и возвращение лота которое нужно для сделки

функция выше делает именно это

Свои наработки: // Не открывает сделки(Мне надо правильное решение только этого!, не переделывать!) if (LotsWayChoice==1) { //выбор по проценту от депо Lot=AccountFreeMargin()*StopPercent/100; //Лот=Свободные средства*5(процент от депо-потери)/100 Lot=MathCeil(Lot/20/10); //Лот=MathCeil(Lot/5(процент от депо/10) } return(Lot); //Возвращение Лота } *надо доработать чтобы возвращало нормальный лот // фиксированный процент от депозита if (LotsWayChoice==1) { Lot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10; //использование процента от депо } return(Lot); } ***Вроде понятно обьяснил

не совсем понятно. попытатесь в тексте абзацами отделить мысли.

DarkAngel
65
DarkAngel 2010.06.21 19:34  

Свои наработки:

// Не открывает сделки(Мне надо правильное решение только этого! исправление!)

if (LotsWayChoice==1) { //выбор по проценту от депо

Lot=AccountFreeMargin()*StopPercent/100; //Лот=Свободные средства*5(процент от депо-потери)/100

Lot=MathCeil(Lot/20/10); //Лот=MathCeil(Lot/5(процент от депо)/10)

}

return(Lot); //Возвращение Лота


*надо доработать чтобы возвращало нормальный лот

// фиксированный процент от депозита(это правильный вариант НО использует процент от депо в сделке)

if (LotsWayChoice==1) {

Lot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10; //использование процента от депо

}

return(Lot);

***Вроде понятно обьяснил

Vladislav Andruschenko
93818
Vladislav Andruschenko 2010.06.21 22:11  

нужно нормализовать данные.


а вот это вообще не осилил зачем такое нужно?

Lot=MathCeil(Lot/20/10); Lot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10;

:-)

DarkAngel
65
DarkAngel 2010.06.22 08:44  
Считает сколько средств использовать от депо в сделки(залог) и возвращает лот -> Lot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10
Vladislav Andruschenko
93818
Vladislav Andruschenko 2010.06.22 09:02  
MathCeil возвращает целое число, Вы торгуете целыми лотами?
DarkAngel
65
DarkAngel 2010.06.22 13:05  
нет торгую не только целыми, просто без MathCeil не возвращает лот нормальный а округлённый, без MathCeil не работает советник а мне нужно чтобы спокойно возвращал нормальный лот. Пример: Без MathCeil - лот 0.05 С MathCeil - лот 0.1 Мне надо чтобы нормально лот считало без MathCeil и если возможно заключить сделку с таким лотом, то заключать. Если невозможно, то ближайший возможный лот.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий