MisterD: Olá novamente, você pode me dizer onde há um erro no seguinte código? Eu chamo o loop no momento de "deinit". Ele apaga tudo, exceto a última ordem. Eu acho que esta linha é muito provavelmente um erro >> para (int i=1; i<=OrdensTotal(); i++) << Entretanto, logicamente tudo parece estar correto... o que eu perdi? Obrigado de antemão!
Faça o laço para trás
//-------------------------------------------------------------------------------------------for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS)==true)
{
int Type=OrderType();
if (OrderSymbol()!= Symbol() || Type <2)continue;
int Ticket=OrderTicket();
bool Modify =OrderDelete(Ticket);
if (Modify == true) Alert ("Ордер Удалён");continue;
if (Modify != true) Alert ("Удаление ордера не удалась");
}
}
//-------------------------------------------------------------------------------------------
MisterD: Olá novamente, você pode me dizer onde há um erro no seguinte código? Eu chamo o loop no momento de "deinit". Ele apaga tudo, exceto a última ordem. Eu acho que esta linha é muito provavelmente um erro >> para (int i=1; i<=OrdensTotal(); i++) << Entretanto, logicamente tudo parece estar correto... o que eu perdi? Obrigado de antemão!
Boa tarde. uma pequena ajuda é necessária. há uma função que fecha um dos lotes mais gordos em termos de lucro.
Preciso fazer um loop it.
Por exemplo, se o patrimônio líquido da minha conta for superior a 5 pips, esta função deve funcionar.
Por exemplo, se o patrimônio líquido da conta for superior a 5 pips (para 4 caracteres) - no mercado real, se o número de ordens for superior a 3-4, elas facilmente se transformarão em menos (de acordo com os resultados da eliminação). :)))
P.S. Como eu vejo, você precisa de um código pronto, enquanto o algoritmo para resolver tal problema é inútil para você!
TarasBY: 5 pips (para 4 sinais) - no mercado real, se o número de ordens for maior que 3-4, ele se transformará facilmente (por resultados de eliminação) em menos. :)))
Eu, por exemplo... e tenho prestado atenção ao ouro ultimamente... ele não reage tão rápido quanto eu pensava que reagiria
Eu ainda não trabalhei com funções nesta forma ... então aqui está um pedido de apoio
Boa tarde, tenho um problema com o desenvolvimento do Expert Advisor, ele não fecha pedidos, embora as condições prescritas para fechamento por um indicador, por favor explique o que é, obrigado de antemão
Bem, eu, por exemplo... e tenho prestado atenção ao ouro ultimamente... não é tão rápido quanto eu pensava que seria
Eu ainda não trabalhei com as funções nesta forma ... então aqui está um pedido de apoio
Primeiro, você calcula a linha BU de uma posição agregada para o instrumento (é usada para determinar as condições de fechamento de pedidos quando eles atingem rentabilidade em pips):
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+//| Автор : TarasBY, taras_bulba@tut.by |//+-----------------------------------------------------------------------------------+//| Определение Уровня БезУбытка по символу |//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+double fGet_BreakEven (string fs_Symbol, // Symboldouble fd_DeltaLots, // разность объемов ордеров Buy и Selldouble fd_Profit) // текущий профит по открытым ордера
{
if (fd_DeltaLots == 0.) return (0.);
double ld_BU = 0., ld_tickvalue = MarketInfo (fs_Symbol, MODE_TICKVALUE); // цена одного пункта//----//---- Уровень общего безубытка для открытых ордеровif (fd_DeltaLots > 0.) ld_BU = MarketInfo (fs_Symbol, MODE_BID) - (fd_Profit / (ld_tickvalue * fd_DeltaLots)) * MarketInfo (fs_Symbol, MODE_POINT);
elseif (fd_DeltaLots < 0.) ld_BU = MarketInfo (fs_Symbol, MODE_ASK) - (fd_Profit / (ld_tickvalue * fd_DeltaLots)) * MarketInfo (fs_Symbol, MODE_POINT);
//----return (ld_BU);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
Em seguida, calcular a diferença entre o preço atual e a linha de Breakeven. Se a "diferença" for satisfatória, procedemos ao procedimento de eliminação de pedidos. A primeira coisa a fazer é encontrar o Ticket da ordem mais rentável/perdedor:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+//| Автор : TarasBY, taras_bulba@tut.by |//+-----------------------------------------------------------------------------------+// Получаем Тикет самого прибыльного/убыточного ордера |//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+int fGet_TicketWithControlProfit (string fs_Symbol = "", // Инструментint fi_Magic = -1, // Magicint fi_Type = -1, // OrderTypeint fi_TypeProfit = 0) // Профитность ордера среди остальных ордеров:// >= 0 - с самым большим профитом;// < 0 - самый убыточный
{
double ld_Profit = 0., ld_curProfit;
int li_Total = OrdersTotal(), li_Ticket = -1;
//----if (fs_Symbol == "") fs_Symbol = Symbol();
if (fi_TypeProfit < 0) ld_Profit = 10000000000.;
for (int i = li_Total - 1; i >= 0; i--)
{
if (!OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != fs_Symbol) continue;
if (fi_Magic > -1) if (OrderMagicNumber() != fi_Magic) continue;
if (fi_Type > -1) if (OrderType() != fi_Type) continue;
if (fi_Type > 1) continue;
ld_curProfit = OrderProfit() + OrderSwap() + OrderCommission();
if (fi_TypeProfit >= 0) {if (ld_Profit <= ld_curProfit) continue;}
elseif (ld_Profit >= ld_curProfit) continue;
ld_Profit = ld_curProfit;
li_Ticket = OrderTicket();
}
//----return (li_Ticket);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
A eliminação pode ser feita em qualquer direção. Vamos apagar:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+//| Автор : TarasBY, taras_bulba@tut.by |//+-----------------------------------------------------------------------------------+//| Функция закрытия "своих" ордеров по признаку |//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+int fClose_AllOrdersByProfit (string fs_Symbol = "", // Инструментint fi_Magic = -1, // Magicint fi_Type = -1, // OrderTypeint fi_TypeProfit = 0) // Направление закрытия ордеро по профитности:// >= 0 - начиная от самого большого профита;// < 0 - начиная от самого маленького профита;
{
int li_Ticket = fGet_TicketWithControlProfit (fs_Symbol, fi_Magic, fi_Type, fi_TypeProfit),
li_cnt = 0;
//----while (li_Ticket > 0)
{
//---- Здесь вставите свою процедуру закрытия //---- что-то типа://ClosePosByTicket (li_Ticket);
li_Ticket = fGet_TicketWithControlProfit (fs_Symbol, fi_Magic, fi_Type, fi_TypeProfit);
li_cnt++;
}
//----return (li_cnt);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
Não é muito difícil montar mais a unidade certa: você terá que fazê-lo ou ir para o trabalho... :)
Olá novamente, você pode me dizer onde há um erro no seguinte código?
Eu chamo o loop no momento de "deinit".
Ele apaga tudo, exceto a última ordem.
Eu acho que esta linha é muito provavelmente um erro >> para (int i=1; i<=OrdensTotal(); i++) <<
Entretanto, logicamente tudo parece estar correto... o que eu perdi?
Obrigado de antemão!
Faça o laço para trás
Olá novamente, você pode me dizer onde há um erro no seguinte código?
Eu chamo o loop no momento de "deinit".
Ele apaga tudo, exceto a última ordem.
Eu acho que esta linha é muito provavelmente um erro >> para (int i=1; i<=OrdensTotal(); i++) <<
Entretanto, logicamente tudo parece estar correto... o que eu perdi?
Obrigado de antemão!
//-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
Experimente assim:
Boa tarde. uma pequena ajuda é necessária. há uma função que fecha um dos lotes mais gordos em termos de lucro.
Preciso fazer um loop it.
Favor aconselhar como usar esta função, por exemplo, se meu patrimônio líquido da conta for superior a 5 pips, então esta função deve funcionar.
}
Boa tarde. uma pequena ajuda é necessária. há uma função que fecha um dos lotes mais gordos em termos de lucro.
Preciso fazer um loop it.
Por exemplo, se o patrimônio líquido da minha conta for superior a 5 pips, esta função deve funcionar.
Por exemplo, se o patrimônio líquido da conta for superior a 5 pips (para 4 caracteres) - no mercado real, se o número de ordens for superior a 3-4, elas facilmente se transformarão em menos (de acordo com os resultados da eliminação). :)))
P.S. Como eu vejo, você precisa de um código pronto, enquanto o algoritmo para resolver tal problema é inútil para você!
5 pips (para 4 sinais) - no mercado real, se o número de ordens for maior que 3-4, ele se transformará facilmente (por resultados de eliminação) em menos. :)))
Eu, por exemplo... e tenho prestado atenção ao ouro ultimamente... ele não reage tão rápido quanto eu pensava que reagiria
Eu ainda não trabalhei com funções nesta forma ... então aqui está um pedido de apoio
Bem, eu, por exemplo... e tenho prestado atenção ao ouro ultimamente... não é tão rápido quanto eu pensava que seria
Eu ainda não trabalhei com as funções nesta forma ... então aqui está um pedido de apoio
Primeiro, você calcula a linha BU de uma posição agregada para o instrumento (é usada para determinar as condições de fechamento de pedidos quando eles atingem rentabilidade em pips):
Em seguida, calcular a diferença entre o preço atual e a linha de Breakeven. Se a "diferença" for satisfatória, procedemos ao procedimento de eliminação de pedidos. A primeira coisa a fazer é encontrar o Ticket da ordem mais rentável/perdedor:
A eliminação pode ser feita em qualquer direção. Vamos apagar:
Não é muito difícil montar mais a unidade certa: você terá que fazê-lo ou ir para o trabalho... :)
Mas por alguma razão, o preço é sacado com um valor de quatro dígitos a 1,3360
Você poderia me dizer o erro?
Quero atribuir um valor de preço a uma variável.
Mas por alguma razão, o preço é sacado com um valor de quatro dígitos a 1,3360
Você pode me dizer o erro?
Talvez o CD seja de quatro dígitos? Ou produzir o preço sem DoubleToStr(YourPrice,5)
Talvez o CD seja de quatro dígitos? Ou exibir o preço sem DoubleToStr(YourPrice,5)
O CD tem cinco dígitos...
o que significa SEM DoubleToStr(YourPrice,5) ? eu não tenho DoubleToStr(YourPrice,5) em nenhum lugar