Функция переноса в бузубыток, учитывающая комиссию - страница 2

 
У моего ДЦ комиссия задается в манях, а не пунктах, $8 за 1 лот.
 
artamir:

Определи размер комиссии в пунктах

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


Спасибо, Ваша формула конкретно помогла, однако иногда почемуто случаются закрытия вроде по outloss но с убытком (как на рисунке). В чём может быть причина.


 
ребята подскажите как можно добавить в советник комиссионные!!!???

extern int Hours = 0;
extern int Мinutes = 0;
extern bool RazVSutki = True;
double var_88 = 0.1;
double var_96 = 0.1;
double var_104 = 3;
double var_112 = 10;
double var_120 = 50;
double var_128 = 120;
double var_136 = 60;
double spread;

//+------------------------------------------------------------------+

int init()
{

}

//+------------------------------------------------------------------+

int deinit()
{
return(0);
}

//+------------------------------------------------------------------+

double LotsOptimized()
{
double retvalue = var_88;
int histtotal = HistoryTotal();
int var_LotsOptimized_12 = 0;
int i;

retvalue = NormalizeDouble(AccountFreeMargin() * var_96 / 300,1);
if (var_104 > 0.0)
{
for (i = histtotal - 1; i >= 0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) == 0)
{
Print("Error in history!");
break;
}
if ((OrderSymbol() != Symbol()) || (OrderType() > OP_SELL)) continue;
if (OrderProfit() > 0.0) break;
if (OrderProfit() < 0.0) var_LotsOptimized_12++;
}
if (var_LotsOptimized_12 > 1) retvalue = NormalizeDouble(retvalue - retvalue * var_LotsOptimized_12 / var_104,1);
}
if (retvalue < 0.1) retvalue = 0.1;
if (retvalue > 100.0) retvalue = 100;
return(retvalue);
}

//+------------------------------------------------------------------+

int start()
{
double var_start_0;
double var_start_8;
double var_start_16;
double var_start_24;
int i;
int var_start_36;
int ordtotal;
bool var_start_44;
bool var_start_48;
double var_start_52;

if (((RazVSutki == 1) && (Hour() == Hours) && (Minute() == Мinutes)) || (RazVSutki == 0))
{
var_start_0 = iCustom(NULL,0,"111",0,1);
var_start_8 = iCCI(NULL,0,3,PRICE_CLOSE,0);
var_start_16 = iMA(NULL,0,var_128,0,MODE_EMA,PRICE_MEDIAN,0);
var_start_24 = iMA(NULL,0,var_128,0,MODE_EMA,PRICE_MEDIAN,1);
ordtotal = OrdersTotal();
var_start_44 = true;
var_start_48 = true;
for (i = 0; i < ordtotal; i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if ((OrderType() == OP_SELL) && (OrderSymbol() == Symbol())) var_start_44 = false;
if ((OrderType() == OP_BUY) && (OrderSymbol() == Symbol())) var_start_48 = false;
}
if (AccountFreeMargin() < var_88 * 1000.0)
{
Print("We have no money. Free Margin = ",AccountFreeMargin());
return(0);
}
if ((var_start_0 == 0) && (var_start_8 < -5) && var_start_4
{
var_start_52 = Ask - var_120 * Point;
var_start_36 = OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,va r_start_52,Ask + var_136 * Point,"starter",16384,0,Green);
}
if ((var_start_0 == 1) && (var_start_8 > 5) && var_start_44)
{
var_start_52 = Bid + var_120 * Point;
var_start_36 = OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,v ar_start_52,Bid - var_136 * Point,"starter",16384,0,Red);
}
for (i = 0; i < ordtotal; i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if ((OrderType() <= OP_SELL) && (OrderSymbol() == Symbol()))
{
if (OrderType() == OP_BUY)
{
if (var_start_0 > 0.9)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;
return(0);
}
if (var_112 > 0.0)
{
if (Bid - OrderOpenPrice() > Point * var_112)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;
return(0);
}
}
}
else
{
if (var_start_0 < 0.1)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;
return(0);
}
if (var_112 > 0.0)
{
if (OrderOpenPrice() - Ask > Point * var_112)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;
return(0);
}
}
}
}
}
}
return(0);

}

 
saak:
ребята подскажите как можно добавить в советник комиссионные!!!???

1. вставляйте код правильно через SRC

2. проще всего комисионные посчитать в deinit

 
что-то не догнал кто удалил код ??!!
 
saak:
что-то не догнал кто удалил код ??!!


вам же объяснили, что код нужно вставлять через SRC.


Что вы понимаете под

добавить в советник комиссионные!!!???

 
double Lots = 0.1;
double var_96 = 1;
double curr_bid = 0;
double curr_ask = 0;
double up_trend = 0;
double down_trend = 0;
int    i;
int    cnt;

//+------------------------------------------------------------------+

int init()
{
return(0);
}

//+------------------------------------------------------------------+

int deinit()
{
return(0);
}

//+------------------------------------------------------------------+

int start()
{


curr_bid = NormalizeDouble(Bid,Digits);
curr_ask = NormalizeDouble(Ask,Digits);


if (up_trend > 0.0)   i = OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,"",5326,0,Red);
if (down_trend > 0.0) i = OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,"",5326,0,Blue);

for (cnt = 0; cnt < OrdersTotal(); cnt++)
   {
   OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
   if ((OrderMagicNumber() == 5326) && (OrderSymbol() == Symbol()))
      {
      if (OrderType() == OP_BUY)  i = OrderClose(OrderTicket(),OrderLots(),Bid,100,Red);
      if (OrderType() == OP_SELL) i = OrderClose(OrderTicket(),OrderLots(),Ask,100,Blue);
      }
   }


return(0);
}

я вчера так и сделал но сегодня код изчез,,

теперь, как тут добавить комиссионные ???

 
saak:

я вчера так и сделал но сегодня код изчез,,

теперь, как тут добавить комиссионные ??

// ProfitBuy=OrderProfit()+OrderSwap()+Commission();
// ProfitSell=OrderProfit()+OrderSwap()+Commission();
// при закрытии ордера делай проверку 

// Если ProfitBuy>0 то можно закрывать позицию 

if (OrderType() == OP_BUY )
{ double ProfitBuy=OrderProfit()+OrderSwap()+OrderCommission();
  if (ProfitBuy>0)
    {
      i = OrderClose(OrderTicket(),OrderLots(),Bid,100,Red);
    }
}

if (OrderType() == OP_SELL) 
{ double ProfitSell=OrderProfit()+OrderSwap()+OrderCommission();
  if (ProfitBuy>0)
     {
      i = OrderClose(OrderTicket(),OrderLots(),Ask,100,Blue);
     }    
}