Tanto quanto me lembro, esta coisa nunca funcionou, e não se consegue obter a comissão para a posição, é preciso percorrer todos os negócios da história, verificar se pertencem à posição seleccionada, e resumindo, fica bastante confuso, mas algures havia um código de exemplo, penso que do fxsaber.
Tanto quanto me lembro, esta coisa nunca funcionou, e não se consegue obter a comissão para a posição, é preciso percorrer todos os negócios da história, verificar se pertencem à posição seleccionada, e resumindo, fica bastante confuso, mas algures houve um exemplo de código, penso que do fxsaber.
fxsaber mostrou-o como um cálculo de todos os pares abertos e essa é a comissão total
Aleksandr Egorov: bem, essa é a questão )) porque é que não podem tornar simples as coisas simples e não calcular a comissão?
Bem sim, não está claro porque é que os criadores não fariam uma função já feita... talvez um dia eles... não costumava haver funções i e todos se debatiam também... agora há... talvez esperemos por comissões...
Bem sim, não está claro porque é que os criadores não fariam uma função já feita... talvez um dia eles... não costumava haver funções i e todos se debatiam também... agora há... talvez esperemos pelas comissões...
Acho que já o fiz pela metade, coloque iClose, mas há um erro. abre uma nova posição depois de cada bar
Tenho-o assim
bool Buy_Condition = (close1 > EMA0[0]);
{
if(Buy_Condition) //Buy
{
if(!RefreshRates())
return;
TimeBar=time_0;
my_TP = m_symbol.Ask() + ExtTakeProfit*Point();
my_SL = m_symbol.Ask() - ExtStopLoss*Point();
my_lot = Lots;
OPENORDER("Sell");
}
}
bool Sell_Condition = (close1 < EMA0[0]);
{
if(Sell_Condition )
{
if(!RefreshRates())
return;
TimeBar=time_0;
my_TP = m_symbol.Bid() - ExtTakeProfit*Point();
my_SL = m_symbol.Bid() + ExtStopLoss*Point();
my_lot= Lots;
OPENORDER("Buy");
}
}
}
if(colorBuffer[m_bar_current+1]>colorBuffer[m_bar_current] ) //Buy
{
if(!RefreshRates())
return;
TimeBar=time_0;
CLOSEORDER("Sell");
}
if(colorBuffer[m_bar_current+1]<colorBuffer[m_bar_current] ) //Sell
{
if(!RefreshRates())
return;
TimeBar=time_0;
CLOSEORDER("Buy");
}
return;
}//--------------------------------------------------------------------void CLOSEORDER(string ord)
{
for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positionsif(m_position.SelectByIndex(i))
if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
{
if(m_position.PositionType()==POSITION_TYPE_BUY && ord=="Buy")
m_trade.PositionClose(m_position.Ticket()); // Close Buyif(m_position.PositionType()==POSITION_TYPE_SELL && ord=="Sell")
m_trade.PositionClose(m_position.Ticket()); // Close Sell
}
}
//--------------------------------------------------------------------void OPENORDER(string ord)
{
if(ord=="Sell")
if(all_positions==1)
for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positionsif(m_position.SelectByIndex(i))
if(m_position.PositionType()==POSITION_TYPE_SELL)
//if(m_position.PositionType()==POSITION_TYPE_SELL)return; // Если buy, то не открываемсяif(!m_trade.Sell(my_lot,Symbol(),m_symbol.Bid(),my_SL,my_TP,""))
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription(),
", ticket of deal: ",m_trade.ResultDeal());
if(ord=="Buy")
if(all_positions==1)
for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positionsif(m_position.SelectByIndex(i))
//if(m_position.PositionType()==POSITION_TYPE_BUY)if(m_position.PositionType()==POSITION_TYPE_BUY)
return; // Если buy, то не открываемсяif(!m_trade.Buy(my_lot,Symbol(),m_symbol.Ask(),my_SL,my_TP,""))
Print("BUY_STOP -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of Retcode: ",m_trade.ResultRetcodeDescription(),
", ticket of order: ",m_trade.ResultOrder());
return;
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Refreshes the symbol quotes data |//+------------------------------------------------------------------+bool RefreshRates()
{
//--- refresh ratesif(!m_symbol.RefreshRates())
return(false);
//--- protection against the return value of "zero"if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
return(false);
//---return(true);
}
//+------------------------------------------------------------------+//| Get Time for specified bar index |//+------------------------------------------------------------------+datetimeiTime(constint index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
{
if(symbol==NULL)
symbol=Symbol();
if(timeframe==0)
timeframe=Period();
datetime Time[];
datetime time=0;
ArraySetAsSeries(Time,true);
int copied=CopyTime(symbol,timeframe,index,1,Time);
if(copied>0)
time=Time[0];
return(time);
}
//+------------------------------------------------------------------+//| Get value of buffers |//+------------------------------------------------------------------+bool iGetArray(constint handle,constint buffer,constint start_pos,
constint count,double &arr_buffer[])
{
bool result=true;
if(!ArrayIsDynamic(arr_buffer))
{
PrintFormat("ERROR! EA: %s, FUNCTION: %s, this a no dynamic array!",__FILE__,__FUNCTION__);
return(false);
}
ArrayFree(arr_buffer);
//--- reset error codeResetLastError();
//--- fill a part of the iBands array with values from the indicator bufferint copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer);
if(copied!=count)
{
//--- if the copying fails, tell the error codePrintFormat("ERROR! EA: %s, FUNCTION: %s, amount to copy: %d, copied: %d, error code %d",
__FILE__,__FUNCTION__,count,copied,GetLastError());
//--- quit with zero result - it means that the indicator is considered as not calculatedreturn(false);
}
return(result);
}
ou seja, não verifica se existe uma encomenda em aberto?
como calcular a comissão de encomendas em aberto em mt5 para cada par separadamente?
por alguma razão não o fará - mostra zeros
Por alguma razão, não quer - mostra zeros.
Tanto quanto me lembro, esta coisa nunca funcionou, e não se consegue obter a comissão para a posição, é preciso percorrer todos os negócios da história, verificar se pertencem à posição seleccionada, e resumindo, fica bastante confuso, mas algures havia um código de exemplo, penso que do fxsaber.
Tanto quanto me lembro, esta coisa nunca funcionou, e não se consegue obter a comissão para a posição, é preciso percorrer todos os negócios da história, verificar se pertencem à posição seleccionada, e resumindo, fica bastante confuso, mas algures houve um exemplo de código, penso que do fxsaber.
fxsaber mostrou-o como um cálculo de todos os pares abertos e essa é a comissão total
fxsaber estava a enviar uma contagem de todos os pares abertos, ou seja, a comissão total
Certo, aqui está o link:https://www.mql5.com/ru/forum/93879/page5
bem, essa é a questão )) porque é que não podem tornar simples as coisas simples e não calcular a comissão?
Bem sim, não está claro porque é que os criadores não fariam uma função já feita... talvez um dia eles... não costumava haver funções i e todos se debatiam também... agora há... talvez esperemos por comissões...
Bem sim, não está claro porque é que os criadores não fariam uma função já feita... talvez um dia eles... não costumava haver funções i e todos se debatiam também... agora há... talvez esperemos pelas comissões...
é provavelmente mais rápido fazê-lo você mesmo...
por alguma razão não quer mostrar zeros
ainda zeros e não quer mostrar comissão
Tenho-o assim
ou seja, não verifica se existe uma encomenda em aberto?
A melhor maneira é criar um sinal no Indicador e depois introduzi-lo no Expert Advisor