Вставляйте пожалуйста на форум код через SRC кнопку в сообщении.
//+------------------------------------------------------------------+ //| | //| | //| | //+------------------------------------------------------------------+ double a, b; bool first=true; extern int Shift = 3; extern int Limit = 18; //---------------------------------------------------------------------------- int start() { if (first) { a=Ask; b=Bid; first=false; return(0); } if (Ask-a>=Shift*Point) { OrderSend(Symbol(),OP_SELL,GetLots(),Bid,3,0,0,"",0,0,CLR_NONE); } if (b-Bid>=Shift*Point) { OrderSend(Symbol(),OP_BUY,GetLots(),Ask,3,0,0,"",0,0,CLR_NONE); } a=Ask; b=Bid; CloseAll(); return(0);} //----------------------------------------------------------------------------- void CloseAll() { for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderSymbol() == Symbol()) { if ((OrderProfit()>0)) { if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); } else { if((OrderType()==OP_BUY) && (((OrderOpenPrice()-Ask)/Point) > Limit)) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); if((OrderType()==OP_SELL) && (((Bid-OrderOpenPrice())/Point) > Limit)) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); } } } } //-------------------------------------------------------------------------- double GetLots() { return (NormalizeDouble(AccountFreeMargin()/1,1)); } //-------------------------------------------------------------------------
Сколько будет если 200/1 и нормализовать полученное значение до одного знака после запятой?
Сколько будет если 200/1 и нормализовать полученное значение до одного знака после запятой?
Нормализация будет корректная, но обратите внимание если вы будете выводить полученное значение через Print в журнал то там возможен так называемый цифровой шум. К примеру после нормализации будет 1.01 а в Print пойдет 1.0100001
Подробнее описано здесь:
Цыфровой шум в восьмом знаке тянется с далекого 1994 года, в первых моделях Pentium
Он до сих пор не устранен, так как все гонятся за скоростью и такая погрешность считается допустимой.
Вы никогда не увидете этого в рендеренге в игрушке в 3D cцене, а 99% пользователей именно такие
Для более точных расчетов и вычислений, как корректно делать описано в статье выше
P.S. Ну или использовать профессиональные процы из линии Xeon
Нормализация будет корректная, но обратите внимание если вы будете выводить полученное значение через Print в журнал то там возможен так называемый цифровой шум. К примеру после нормализации будет 1.01 а в Print пойдет 1.0100001
Подробнее описано здесь:
Вообще-то вопрос был другой
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Помогите с NormalizeDouble(AccountFreeMargin()
Anton Danilchenko, 2018.01.15 09:02
какое значение (NormalizeDouble(AccountFreeMargin()/1,1)); будет соответствовать минимальному значению от баланса? 1%
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
bool first=true;
extern int Shift = 3;
extern int Limit = 18;
//----------------------------------------------------------------------------
int start()
{
if (first)
{
a=Ask;
b=Bid;
first=false;
return(0);
}
if (Ask-a>=Shift*Point)
{
OrderSend(Symbol(),OP_SELL,GetLots(),Bid,3,0,0,"",0,0,CLR_NONE);
}
if (b-Bid>=Shift*Point)
{
OrderSend(Symbol(),OP_BUY,GetLots(),Ask,3,0,0,"",0,0,CLR_NONE);
}
a=Ask;
b=Bid;
CloseAll();
return(0);}
//-----------------------------------------------------------------------------
void CloseAll()
{
for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol())
{
if ((OrderProfit()>0))
{
if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
else
{
if((OrderType()==OP_BUY) && (((OrderOpenPrice()-Ask)/Point) > Limit))
OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
if((OrderType()==OP_SELL) && (((Bid-OrderOpenPrice())/Point) > Limit))
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
}
}
}
//--------------------------------------------------------------------------
double GetLots()
{
return (NormalizeDouble(AccountFreeMargin()/1,1));
}
//-------------------------------------------------------------------------
какое значение (NormalizeDouble(AccountFreeMargin()/1,1)); будет соответствовать минимальному значению от баланса? 1%