Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
E onde tudo isso existe? Você o escreve em algum lugar em uma variável ou em uma matriz? Mostre-me onde você o guarda primeiro, depois você pode ver o que fazer a seguir.
OK, então vamos quebrar: há um horário de fechamento de pedidos, há um bilhete ou número de pedidos que coincide com o horário de fechamento. Como combinar e calcular o lucro desses pedidos?
Parece ser fácil, mas ainda não o entendo.
Até agora, ninguém consegue descobrir quais estão destacados em vermelho. Precisamos dos critérios exatos para encontrar essas ordens. Portanto, tente explicar, como dizem nos dedos, com fotos e assim por diante.
?
Por que ninguém pode entender isso, você provavelmente se refere a si mesmo?
Tudo está claro há muito tempo.
A senhora só quer fazê-lo por conta própria, sem ostentar os detalhes de seu programa.
Até agora, ninguém consegue entender quais estão destacados em vermelho. Precisamos de critérios precisos para encontrar essas ordens. Por este motivo, tente explicar, como dizem nos dedos, com fotos e assim por diante
Sim, eu já dei uma condição de 100% de trabalho e o anexei como código pronto. Você também deve observar que o código usa um método que não é afetado pelo reinício do terminal, e nada será perdido quando o terminal for ligado e continuará a funcionar. Mas aqui eles inventam uma roda que só funcionará no testador.
Sergey, observe também que no código TS original quando você fecha uma série de 5 posições, a ordem no meio do fechamento também é excluída, o que, por sua vez, não levará a nada de bom na negociação real. Em geral, tudo é claro para todos, exceto para o TS.
//| Natashe4ka.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
input int Magic=1;//Identification number
double Profit=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
color ProfitColor=0;
// START //
LastProfitCL_1(Profit,TimeCurrent(),-1);
if(Profit<0)ProfitColor=clrRed;
else if(Profit>0)ProfitColor=clrLimeGreen;
else ProfitColor=clrDarkGray;
ObjectCreate("Last Profit",OBJ_LABEL,0,0,0);
ObjectSet("Last Profit",OBJPROP_CORNER,1);
ObjectSet("Last Profit",OBJPROP_XDISTANCE,5);
ObjectSet("Last Profit",OBJPROP_YDISTANCE,15);
ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(Profit,2)),10,"Arial",ProfitColor);
// END START //
}
//+------------------------------------------------------------------+
//Вариант 1
//+------------------------------------------------------------------+
bool LastProfitCL_1(double &LastProfit,//сюда записываем профит
datetime timecurent,// текущее время
int op=-1//"op" позиция (-1 любая позиция)
)
{
double profit=0;
int cnt=0;
datetime timecurents=0;
int total=OrdersHistoryTotal();
for(int i=total-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderType()>1)continue;// исключим удаленные отложенные ордера
if(OrderCloseTime()!=timecurent)continue;
if(OrderType()==op || op==-1)
{
profit+=OrderProfit()+OrderCommission()+OrderSwap();
cnt++;
}
}
if(cnt!=0)
{
LastProfit=profit;
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Вариант 2 |
//+------------------------------------------------------------------+
bool LastProfitCL_2(double &LastProfit,//сюда записываем профит
datetime timecurent,// текущее время
int op=-1//"op" позиция (-1 любая позиция)
)
{
double profit=0;
int cnt=0;
datetime timecurents=0;
int total=OrdersHistoryTotal();
if(OrderSelect(total-1,SELECT_BY_POS,MODE_HISTORY))
{
timecurents=OrderCloseTime();
}
for(int i=total-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderCloseTime()<timecurents)continue;
if(OrderType()>1)continue;// исключим удаленные отложенные ордера
if(OrderType()==op || op==-1)
{
profit+=OrderProfit()+OrderCommission()+OrderSwap();
cnt++;
}
}
if(cnt!=0)
{
LastProfit=profit;
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
Corrigida a segunda versão da função
datetime timecurent,// текущее время
int op=-1//"op" позиция (-1 любая позиция)
)
{
double profit=0;
int cnt=0;
datetime timecurents=0;
int total=OrdersHistoryTotal();
for(int i=total-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if(OrderType()>1)continue;// исключим удаленные отложенные ордера
if(OrderType()!=op && op!=-1)continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderSymbol()!=_Symbol)continue;
if(timecurents==0)timecurents=OrderCloseTime(); // запомним время последнего закрытого ордера
if(OrderCloseTime()<timecurents)continue;
profit+=OrderProfit()+OrderCommission()+OrderSwap();
cnt++;
}
if(cnt!=0)
{
LastProfit=profit;
return(true);
}
return(false);
}
..........
Corrigida a segunda versão da função
Obrigado por sua ajuda.
A variante 1 não funciona corretamente
A variante 2 funciona corretamente.
Minha variante também funciona corretamente, mas se as ordens forem transportadas para outro dia ou mais, o valor não é Lucro 190 claro, enquanto que deveria ser 4,27.
Veja o screenshot #3https://www.mql5.com/ru/forum/162930/page3
// Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
datetime t=0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderSymbol()!=Symbol()||OrderMagicNumber()!=magic) continue;
if (t<OrderCloseTime()) {t=OrderCloseTime();}
if ((op<0||OrderType()==op) && t==OrderCloseTime()) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
Afinal, o problema não é o número de pedidos, mas a transferência de pedidos para outro dia ou mais.
Então você fecha em uma série ou o quê? O que é o carry-over se você fechar todos os pedidos em um ciclo?
Os pedidos são fechados por série, mas se não houver condições de fechamento, os pedidos são reunidos por um ou dois dias, etc.
Embora, o número de pedidos também afete o valor do lucro.
Se houver mais de 3 pedidos, o valor é calculado apenas para o último pedido fechado.