Que yo recuerde, esto nunca funcionó, y no se puede obtener la comisión de la posición, hay que recorrer todas las operaciones del historial, comprobar si pertenecen a la posición seleccionada, y sumarlo, se hace bastante lioso, pero en algún sitio había un código de ejemplo, creo que de fxsaber.
Que yo recuerde, esto nunca funcionó, y no se puede obtener la comisión de la posición, hay que recorrer todas las operaciones del historial, comprobar si pertenecen a la posición seleccionada, y sumarlo, se hace bastante lioso, pero en algún sitio había un código de ejemplo, creo que de fxsaber.
fxsaber lo mostró como un cálculo de todos los pares abiertos y que es la comisión total
Aleksandr Egorov: bueno, esa es la cuestión )) ¿por qué no pueden hacer las cosas simples y no calcular la comisión?
Pues sí, no está claro por qué los desarrolladores no harían una función preparada... quizás algún día lo hagan... antes no había i-funciones y todo el mundo luchaba también... ahora hay... tal vez esperemos una comisión...
Pues sí, no está claro por qué los desarrolladores no harían una función preparada... quizás algún día lo hagan... antes no había i-funciones y todo el mundo luchaba también... ahora hay... quizás esperemos a las comisiones...
Creo que lo he hecho a medias, he puesto iClose, pero hay un error. abre una nueva posición después de cada barra
Lo tengo así
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);
}
¿cómo calcular la comisión de las órdenes abiertas en mt5 para cada par por separado?
por alguna razón no lo hace - muestra ceros
Por alguna razón no quiere - muestra ceros.
Que yo recuerde, esto nunca funcionó, y no se puede obtener la comisión de la posición, hay que recorrer todas las operaciones del historial, comprobar si pertenecen a la posición seleccionada, y sumarlo, se hace bastante lioso, pero en algún sitio había un código de ejemplo, creo que de fxsaber.
Que yo recuerde, esto nunca funcionó, y no se puede obtener la comisión de la posición, hay que recorrer todas las operaciones del historial, comprobar si pertenecen a la posición seleccionada, y sumarlo, se hace bastante lioso, pero en algún sitio había un código de ejemplo, creo que de fxsaber.
fxsaber lo mostró como un cálculo de todos los pares abiertos y que es la comisión total
fxsaber enviaba un recuento de todos los pares abiertos, es decir, la comisión total
Bien, aquí está el enlace:https://www.mql5.com/ru/forum/93879/page5
bueno, esa es la cuestión )) ¿por qué no pueden hacer las cosas simples y no calcular la comisión?
Pues sí, no está claro por qué los desarrolladores no harían una función preparada... quizás algún día lo hagan... antes no había i-funciones y todo el mundo luchaba también... ahora hay... tal vez esperemos una comisión...
Pues sí, no está claro por qué los desarrolladores no harían una función preparada... quizás algún día lo hagan... antes no había i-funciones y todo el mundo luchaba también... ahora hay... quizás esperemos a las comisiones...
probablemente sea más rápido hacerlo uno mismo...
por alguna razón no quiere mostrar los ceros
sigue en ceros y no quiere mostrar la comisión
Lo tengo así
es decir, no comprueba si hay una orden abierta?
La mejor manera es crear una señal en el Indicador y luego introducirla en el Asesor Experto