Pergunta como calcular uma série de pedidos perdidos ????
Quero saber quantos pedidos em fila fecharam em uma parada para verificar as táticas... e especialmente o último
Pessoal, eu realmente preciso disso .....
É assim que eu o calculo para mim:
Iteração = quantas vezes uma ordem seguida fechou em uma parada se uma parada em seu sentido é uma parada que dá prejuízo.
//---------------------расчет по истории ордеров номера очередной итерации-----------------------------------------------
Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
Sum_Loss = 0; // суммарный убыток по этим итерациямdatetime
Time_at_History_Current = 0,
Time_at_History_Previos = 0;
if(OrdersHistoryTotal() != 0)
{
for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
{
OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера// для последующего его анализа при подсчете количества итераций
{
double lastLoss = OrderProfit();
Sum_Loss=Sum_Loss+lastLoss; // считаем общий убыток по закрытым подряд убыточным ордерам
Time_at_History_Current = OrderCloseTime();
}
//Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));//Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
{
Time_at_History_Previos = Time_at_History_Current ;
Iteration++;
//Print("Iteration at History в условии сравнения = ", Iteration);
}
else// они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
{
if(OrderProfit() >= 0)
break;
}
}
}
}
}
VOLDEMAR: Obrigado! Mas, pelo que entendi, este código encontra toda a série na história, independentemente de ter sido há 100 ofícios ou 5 .....
Não. A seleção do fechado mais próximo entra profundamente na história, e quando um fechado se transforma em lucro, a série é interrompida com a saída do número de negócios perdidos consecutivos = Iteração.
Pergunta: a OrderSend() pode devolver um valor de "0", ou menos que "-1" após a execução? Alguém já encontrou algo assim? Ou as informações fornecidas na "documentação" estão corretas:
int OrderSend(
string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Função básica usada para abrir uma posição ou definir uma ordem pendente. Devolve o número do bilhete que é atribuído ao pedido pelo servidor comercial, ou -1 em caso de falha.
P.S.: trabalhando como Telepata, procurando um erro no código de outra pessoa...
Eu fiz uma rede de arrasto virtual com linhas horizontais, no testador funciona bem, mas durante a otimização o testador aparentemente não funciona com essas linhas, por quê?
DimaMA: Eu fiz uma rede de arrasto virtual com linhas horizontais, ela funciona bem no testador, mas durante a otimização o testador provavelmente não funciona com essas linhas, por quê? e como consertá-lo?
Por que você precisa de uma linha horizontal? Armazene o valor da linha em uma variável e você ficará feliz!!! E o Conselheiro Especialista "pensará" mais rápido! E você pode deixar a linha horizontal apenas para efeito visual.
E a razão é a seguinte: o testador trabalha com objetos gráficos somente em modo visual! Ao otimizar, não há nenhum modo visual... Embora, você possa tentar deixar o gráfico com "visual" entre parênteses após o nome de TF e par... Mas não sei se isso vai ajudar ou não. Não o verifiquei. Pensei que ajudaria, porque podemos ver as ordens que aparecem e desaparecem neste gráfico (que foi usado para testes de visualização antes) (embora o gráfico ainda não tenha sido ativado)... Talvez Alguém nos diga!
Meu conselho a você - não utilize a extração de parâmetros de objetos gráficos. Que estes parâmetros sejam armazenados em variáveis... Não torne o objeto gráfico uma variável! :))))
Pergunta: a OrderSend() pode devolver um valor de "0", ou menos que "-1" após a execução? Alguém já encontrou algo assim? Ou as informações fornecidas na "documentação" estão corretas:
P.S.: trabalhando como telepata, procurando por um erro no código de outra pessoa...
Hai!
Por que não? Se um pedido não for aberto devido a uma solicitação, por exemplo.
Para isso existe um loop para a abertura real de pedidos, por exemplo, como este - o número de tentativas de abertura com manipulação de erros:
int NumberOfTry = 25;
//+------------------------------------------------------------------+//| Установка ордера |//+------------------------------------------------------------------+void WmOrderSend(string symbol, int cmd, double volume, double price, double stoploss, double takeprofit, string comment, int magic, datetime expiration = 0)
{
color clr;
datetime opentime;
int ticket;
int error;
comment = WindowExpertName() + " " + GetNameTF(Period()) + " " + comment;
int msl = MarketInfo(symbol, MODE_STOPLEVEL);
clr = CLR_NONE;
if (cmd == OP_BUY) clr = ColorBuy;
elseif (cmd == OP_SELL) clr = ColorSell;
if ((expiration > 0) && (expiration < TimeCurrent())) expiration = 0;
for (int try = 1; try <= NumberOfTry; try++)
{
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
opentime = TimeCurrent();
ticket = OrderSend(symbol, cmd, volume, price, SlipPips, stoploss, takeprofit, comment, magic, expiration, clr);
if (ticket > 0)
if (UseSound) {PlaySound("ok.wav"); break;}
else
{
error = GetLastError();
if (error == ERR_TRADE_TIMEOUT)
{
Sleep(1000*66);
if (ExistOrders(symbol, cmd, magic, opentime))
{
if (UseSound) {PlaySound("ok.wav"); break;}
}
}
Print("Error(", error, ") set order: ", ErrorDescription(error), ", try ", try);
continue;
}
Print("Error(", error, ") set order: ", ErrorDescription(error), ", try ", try);
Print("Ask=", Ask, " Bid=", Bid, " symbol=", symbol, " volume=", volume, " cmd=", GetNameOP(cmd), " price=", price, " stoploss=", stoploss, " takeprofit=", stoploss, " magic=", magic);
if ((error == ERR_COMMON_ERROR) || (error == ERR_ACCOUNT_DISABLED) || (error == ERR_INVALID_ACCOUNT) || (error == ERR_TRADE_DISABLED))
{
IsExpertFailed = true;
break;
}
if ((error == ERR_SERVER_BUSY) || (ERR_INVALID_TRADE_VOLUME) || (error == ERR_MARKET_CLOSED))
{
Sleep(1000*300);
break;
}
if ((error == ERR_TOO_FREQUENT_REQUESTS) || (error == ERR_TOO_MANY_REQUESTS)) Sleep(1000*100);
if ((error == ERR_ORDER_LOCKED) || (error == ERR_LONG_POSITIONS_ONLY_ALLOWED) || (error == ERR_TRADE_TOO_MANY_ORDERS)) break;
if (error == ERR_TRADE_CONTEXT_BUSY) while (IsTradeContextBusy()) Sleep(1000*11);
if (error == ERR_TRADE_EXPIRATION_DENIED ) {expiration = 0; continue;}
if ((error != ERR_PRICE_CHANGED) && (error != ERR_REQUOTE)) Sleep(1000*7.7);
}
}
Pergunta como calcular uma série de pedidos perdidos ????
Quero saber quantos pedidos em fila fecharam em uma parada para verificar as táticas... e especialmente o último
Pessoal, eu realmente preciso disso .....
É assim que eu o calculo para mim:
Iteração = quantas vezes uma ordem seguida fechou em uma parada se uma parada em seu sentido é uma parada que dá prejuízo.
Obrigado! Mas, pelo que entendi, este código encontra toda a série na história, independentemente de ter sido há 100 ofícios ou 5 .....
Não. A seleção do fechado mais próximo entra profundamente na história, e quando um fechado se transforma em lucro, a série é interrompida com a saída do número de negócios perdidos consecutivos = Iteração.
Boa tarde.
Seria esta a combinação certa?
Eu gostei desta:)
Eu gosto desta:)
há aqui algum erro?
Preciso devolver o valor da barra onde Spread==0,
Se não for encontrado tal valor, retornar -1.
Olá.
Pergunta: a OrderSend() pode devolver um valor de "0", ou menos que "-1" após a execução? Alguém já encontrou algo assim? Ou as informações fornecidas na "documentação" estão corretas:
Devolve o número do bilhete que é atribuído ao pedido pelo servidor comercial, ou -1 em caso de falha.
Eu fiz uma rede de arrasto virtual com linhas horizontais, ela funciona bem no testador, mas durante a otimização o testador provavelmente não funciona com essas linhas, por quê? e como consertá-lo?
Por que você precisa de uma linha horizontal? Armazene o valor da linha em uma variável e você ficará feliz!!! E o Conselheiro Especialista "pensará" mais rápido! E você pode deixar a linha horizontal apenas para efeito visual.
E a razão é a seguinte: o testador trabalha com objetos gráficos somente em modo visual! Ao otimizar, não há nenhum modo visual... Embora, você possa tentar deixar o gráfico com "visual" entre parênteses após o nome de TF e par... Mas não sei se isso vai ajudar ou não. Não o verifiquei. Pensei que ajudaria, porque podemos ver as ordens que aparecem e desaparecem neste gráfico (que foi usado para testes de visualização antes) (embora o gráfico ainda não tenha sido ativado)... Talvez Alguém nos diga!
Meu conselho a você - não utilize a extração de parâmetros de objetos gráficos. Que estes parâmetros sejam armazenados em variáveis... Não torne o objeto gráfico uma variável! :))))
Olá.
Pergunta: a OrderSend() pode devolver um valor de "0", ou menos que "-1" após a execução? Alguém já encontrou algo assim? Ou as informações fornecidas na "documentação" estão corretas:
P.S.: trabalhando como telepata, procurando por um erro no código de outra pessoa...Hai!
Por que não? Se um pedido não for aberto devido a uma solicitação, por exemplo.
Para isso existe um loop para a abertura real de pedidos, por exemplo, como este - o número de tentativas de abertura com manipulação de erros: