[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 699

 
artmedia70:

Aqui você tem

OpenBuy nulo() {

duplo dStopLoss = 0, dTakeProfit = 0;
double Lots_New = Lote;

se (isLossLastPos(NULL, -1, MAGIC))
Lots_New *= 2;
senão se (!isLossLastPos(NULL, -1, MAGIC))

Lots_New = Lote;

É uma função, e logo no início desta função você atribui à variável Lots_New o valor = Lote;

Pense em como ele mudará depois se você sempre o trouxer de volta ao seu estado original?

Onde eu lhe disse para escrevê-lo? Nas variáveis externas antes da função de início.

E normalizar o valor do lote para o tamanho correto:

Lots_New = NormalizeLot(Lote*2, Falso, "");




Muito obrigado!

Você também pode nos dizer se você pode agregar muito valor a cada ordem subseqüente de perda? Você pode usar algo como isto

1 lote 0,01

2 lote 0,01

3 lote 0,02

4 lote 0.03

5 lote 0,07

.....

15 lote 1.2

Ser capaz de mudar o valor do lote em código.

E que, caso um acordo se revelasse rentável, tudo voltaria ao início.

Agradeço antecipadamente.

Obrigado.

 
Necron:
Roger, obrigado, mas ainda não funciona corretamente. Eu tentei adicionar outra parada móvel, mas o erro ainda está lá :( Existe alguma diferença entre parada móvel para uma posição e parada móvel para várias posições ao mesmo tempo?

Em princípio, não faz diferença.
Tente minha função, é simples o suficiente, passe como parâmetros, medjic, e arrasto desejado.
A chamada desta função é realizada no início, em qualquer lugar, desde que "esguiche" lá a cada tique.

//+------------------------------------------------------------------+
void trailing(int magic, int trailing){
   int index = 0;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUY){
            if(Bid - OrderStopLoss() > Point*trailing){
               if(trailing >= MarketInfo(Symbol(), MODE_STOPLEVEL) && trailing > MarketInfo(Symbol(), MODE_FREEZELEVEL))
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - (Point*trailing), OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
            }
            return;
         }
         if(OrderType() == OP_SELL){
            if(OrderStopLoss() - Ask > Point*trailing || OrderStopLoss() == 0){
               if(trailing >= MarketInfo(Symbol(), MODE_STOPLEVEL) && trailing > MarketInfo(Symbol(), MODE_FREEZELEVEL))
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + (Point*trailing), OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+

Obviamente, os pedidos devem ter diferentes controles deslizantes.

 
Por favor, diga-me por que não funciona:

OrderSelect(1,SELECT_BY_POS,MODE_TRADES);

código de erro 4051. Há um pedido OP_BUY aberto.
Arquivos anexados:
ma_1.mq4  3 kb
 
itum:

Ajude-me a resolver um problema!


Eu procuro por pedidos que estão abertos ou pendentes. Se eles estiverem disponíveis, então eu determino qual ordem é de compra ou venda. Sob certas condições (se uma for maior que a outra ou menor que a terceira), eu quero fechar esta ordem. Alterar seus parâmetros e abri-lo novamente.

O problema é que há sempre um sinal para fechar a ordem e para abri-la. É por isso que meu pedido fecha, depois abre novamente, e assim por diante, abre e fecha ... )))

Como resolver este problema ? Ga
Acho que é um deja vu... Serei eu o único? Você já teve várias respostas... O que é isso?
Coloque aqui seu código com as condições de abertura e abertura. Vamos pôr o dedo na ferida... :)
 
an11:
Por favor, diga-me por que não funciona:

OrderSelect(1,SELECT_BY_POS,MODE_TRADES);

código de erro 4051. Há um pedido OP_BUY aberto.

A contagem do número na função OrderSelect() começa de zero. E você tem 1, o que significa que você está procurando a segunda ordem, embora você só tenha uma no mercado, e é por isso que não funciona.

 
Vinin:
Você pode fazer isso com parâmetros, mas não com padrões. Primeiro é preciso definir os critérios. Semelhante, não semelhante. E se for semelhante, então até que ponto. Pelo menos por quanto (por cento). Em um caso o componente tempo, no outro - o preço. Como correlacioná-los uns com os outros. Embora eu possa fixar uma camada neurônica. A camada Kohonen faz isso muito bem.

Tenho 12 variantes de um padrão em um dos meus indicadores, o padrão é o mesmo, mas os valores são sempre diferentes e sua relação é diferente )), ....)) Nunca trabalhei com redes neurais, acho que minha experiência em escrever algoritmos elementares usando mql não será suficiente, embora isso possa me ajudar a consertá-la. Eu lidei com esta tarefa antes "barbaramente" substituindo Kohonen, escrevendo todos os parâmetros em Exxel no momento da ocorrência do padrão e o resultado se o negócio fosse aberto, então usando a análise de Exxel eu tive que procurar mais correspondências em correlação com a rentabilidade. De qualquer forma eu consegui algo e o sistema definiu o padrão sabiamente, mas mesmo assim não foi muito inteligente).
 
cyclik33: ...

Não sei que função você está usando, mas a idéia geral é a seguinte: como seu tom não é nem mesmo, sugiro usar um array, você escreve os volumes que precisa nele, e então usa a função para passar pelo seu valor.

Exemplo no meu código:

//+------------------------------------------------------------------+
double getMartinLot(double lot, double arrayLot[]){//ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛА
   static double balance_before, balance_after;    //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОК
   static double save_Lot;   
   static int loop;
   if(loop == ArraySize(arrayLot))loop = 0;   
   balance_after = AccountBalance();               //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСА   
   if(balance_after >= balance_before){            //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
      save_Lot = lot;                              //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ
      loop = 0;
   }else{
      save_Lot = arrayLot[loop];                   //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ
      loop++;
   }
   balance_before = balance_after;                 //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫ
   return(save_Lot);
}
//+------------------------------------------------------------------+
Exemplo de chamada de função:
//+------------------------------------------------------------------+
int start()
  {
   double volume[] = {0.1, 0.1, 0.2, 0.3, 0.7};   //создаем массив с объемами

   if(OrdersTotal() == 0){
      OrderSend(Symbol(), OP_BUY, getMartinLot(0.1, volume), Ask, 10, Bid - 25*Point, Bid + 25*Point, "", 777);
   }
}
//+------------------------------------------------------------------+
 
artmedia70:
Eu acho que é De ja vu... Serei eu o único? Você já teve várias pessoas lhe respondendo... O que é isso?
Coloque seu código com a condição de abrir e abrir a pose. Vamos pôr o dedo na ferida... :)
Eu também :))) Valentin, por alguma razão, não quer mostrar o código, talvez ele não queira mostrar suas idéias...
 
ToLik_SRGV:

Não sei que função você está usando, mas aqui está uma idéia geral: como seu tom não é plano, sugiro usar um array, você escreve os volumes necessários nele, e então usa a função para percorrer os valores.

Exemplo no meu código:

Exemplo de chamada de função:

Muito obrigado!!!!!

Eu também uso seu código (e por sinal funciona bem), mas eu queria instalar o código Artemis em outro EA, primeiro, porque eu tinha mais problemas com ele, e havia uma questão de princípio, por que ele não funcionava corretamente.

Muito obrigado mais uma vez !!!! Vou tentar agora!

 

A questão pode ser trivial, o Expert Advisor está negociando na M1, o sinal para abrir uma ordem chegou, vamos assumir que a parada é curta e a ordem fechada na sl. mas a condição para abrir ainda existe.

Qual é a melhor maneira de garantir que o pedido não seja aberto novamente no mesmo minuto?

Razão: