Precisamos acrescentar uma condição para dividir os pedidos fechados em série
Diga-nos o princípio do algoritmo ou da divisão
Como fazer com que cada lucro fechado de uma série seja um novo, não o anterior (5; 5; 5; 5) ?? .....
O lucro das ordens fechadas é considerado corretamente, mas após o fechamento adiciona o valor ao anterior (5; 5+5=10; 10+5=15)
Como fazer com que cada lucro fechado de uma série seja um novo, em vez do anterior (5; 5; 5; 5) ?
Em uma série de pedidos fechados pode haver compra e venda, ou apenas compra e apenas vende pedidos
// START //
if(LastProfitCL(-1)<0) ProfitColor=Red;
if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
if(LastProfitCL(-1)==0)ProfitColor=DarkGray;
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(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //
//+----------------------------------------------------------------------------+
//| Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=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()) continue;
if (OrderMagicNumber()!= magic) continue;
if (OrderType()!= op) continue;
if (op<0 || OrderType()==op) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
É complicado, há algo mais simples?
E exemplos que você pode dar, porque seu cérebro está fervendo?
Isto é um pouco complicado; há algo mais simples?
Não, não vai ser mais fácil. Você sempre conta TODAS as ordens, incluindo aquelas que foram contadas durante as vezes anteriores que você usou a funçãoLastProfitCL.E como há cada vez mais pedidos, a quantidade de lucro também aumenta.
Temos que trabalhar a condição segundo a qual o laço será quebrado quando as novas encomendas forem concluídas.
Precisamos trabalhar em uma condição na qual o loop será interrompido quando as novas ordens se esgotarem.
Ali, essa é a maneira correta de pensar sobre isso))
Ali, essa é a maneira correta de pensar sobre isso))
Então?
Onde está a condição?
Então?
Onde está a condição?
algo como isto:
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
e você tem que de alguma forma subtrair cnt novo do passado
cnt 1,2,3 passado
cnt 4,5,6 novo
algo como isto:
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
e você tem que de alguma forma subtrair cnt novo do passado
cnt 1,2,3 passado
cnt 4,5,6 novo
Não, não me refiro à maneira como você já escreveu.
Diga-me em palavras - cálculo de lucro para pedidos fechados em que você está interessado
por exemplo:
- para o dia
- que gera perdas
- último pedido
ou algo mais?
Descreva a série
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
O lucro das ordens fechadas é considerado corretamente, mas após o fechamento adiciona o valor ao anterior (5; 5+5=10; 10+5=15)
Como fazer com que cada lucro fechado de uma série seja um novo, em vez do anterior (5; 5; 5; 5) ?
Em uma série de pedidos fechados pode haver compra e venda, ou apenas compra e apenas vende pedidos
// START //
if(LastProfitCL(-1)<0) ProfitColor=Red;
if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
if(LastProfitCL(-1)==0)ProfitColor=DarkGray;
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(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //
//+----------------------------------------------------------------------------+
//| Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=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 (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue;
if (op<0 || OrderType()==op) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}