[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 403

 
mersi:
Baixe o histórico e a pergunta vai embora

Como você faz o download?
 
kolyango:

Eu entendo corretamente:

A implementação específica está muito ligada às suas condições.

Uma bandeira é simplesmente uma variável na qual o estado é armazenado. Grosso modo, ela pode ser levantada ou baixada. Construa a partir disso e implemente sua lógica.

 
w_ersoc:

Você pode aconselhar como escrever uma condição correta para que o Expert Advisor acione 1 vez com a abertura de um novo bar em um período de tempo especificado? :(

Você pode criar diferentes variantes, muitas vezes usa este tipo de condição:

int start()
static datetime dtBar;
//.................
if(Time[0]==dtBar) return(0);//…проверим открытие новой свечи
dtBar=Time[0]; //(тот же Бар-возврат)(новый-продолжение...)
// 
 
splxgf:

A implementação específica está muito ligada às suas condições.

Uma bandeira é simplesmente uma variável na qual a condição é armazenada. Grosso modo, ela pode ser levantada ou baixada. Construa a partir disso e implemente sua lógica.


Bem, eu entendi bem o ponto?

Eu entendo corretamente:

1. Se a condição1 for cumprida, então Flag_CCP1 recebe um valor verdadeiro e começamos imediatamente a verificar a condição2

2. se a condição2 for cumprida, então o valor verdadeiro é atribuído à bandeira Flag_CCP2; se não, então é uma bandeira falsa, e no próximo tick

não verificamos mais a condição1, e passamos diretamente à condição2 e assim por diante, até que a condição2 seja cumprida e que ela tenha um valor verdadeiro

3. depois verificamos a condição3 e Flag_USSR2 (e o que exatamente na URSS2 verificamos se é verdadeiro ou falso, ou o quê?)

Isto é correto? Não há uma única transação no testador... Embora deva haver, se estiver certo. O que está errado...?

static bool Val_max, Cl_dn, Val_min; //static or global
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int
   i, j, total,
   cnt,
   OrderBuy,
   OrderSell,
   Magic,
   Ticket,                                      // Номер ордера
   Total=0,                                     // Количество ордеров в окне
   Tip=-1;                                      // Тип выбран. ордера (B=0,S=1)      
   double
   Open_0,
   ask,
   bid,
   Price,                                       // Цена выбранного ордера
   SL,                                          // SL выбранного ордера
   TP,                                          // TP выбранного ордера
   Lot;                                         // Колич. лотов в выбран.ордере
   Open_0=Open[0];                             // Цена откр. формирующегося бара
   ask=Ask;                                    // Текущая цена покупки
   bid=Bid;                                    // Текущая цена продажи
   string
   Symb;                                        // Название финанс. инструмента
   Symb=Symbol();                               // Название фин.инстр.
double Value_max=1.0000;
double Value_min=0.9980;
double Open_1= Open[1];
double Close_1= Close[1];
//----

//--------------------------------------------------------------- 4 --

double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
if (Val >= Value_max) Val_max=true;                  // 
if (Open_1 > Close_1) Cl_dn=true;
if (Val <= Value_min && Cl_dn==true) Val_min=true;
if (Val_max==true && Cl_dn==true && Val_min==true)
  {
   for (j = 0; j < OrdersTotal(); j++)
    {
     OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol() == Symbol())
      {
      if (OrderType() == OP_SELL) return(0);
      }
    }

   OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),2,Bid+400*Point,Bid-400*Point,"",3,Red);  // Открытие SELL
   Val_max=false; Cl_dn=false; Val_min=false;
  }

//----
   return(0);
  }
 

Hi!

Estabeleci um objetivo de limitar as posições abertas simultaneamente a 1.

Com a variável Abrir/Fechar nível = 3/2 multiplicado por Ponto, colocado nas condições de posição aberta/fechada, tentei resolver esta tarefa, mas não tive sucesso.

Por favor, ajude-me a descobrir :)

 
kolyango:


Isto é a coisa certa a fazer? Não há uma única transação no testador... Embora deva haver, se estiver certo. O que está errado...?

Agora, escreva novamente as condições na íntegra no idioma normal e você pode corrigir o código... O bom dos sinais é que eles devem ter uma data de expiração e cancelamento.
 
skyjet:

Hi!

Estabeleci um objetivo de limitar as posições abertas simultaneamente a 1.

se(OrdensTotal()>0) retornar;

Ou uma variação com o símbolo e a expulsão de ordens pendentes.

 

ou seja, na minha versão

if(OrdersTotal()>1)return;

?

 
splxgf:
Agora, escreva novamente as condições por extenso no idioma normal e depois poderá corrigir o código... O bom dos sinais é que eles devem ter um período de expiração e cancelamento.

Todas estas condições podem não seguir uma à outra de uma vez (pode ser depois de uma hora ou duas ou três), então precisamos fazer com que assim que o indicador atingir 1,0000, esta condição não seja verificada a cada tic, e esperar até que uma barra feche com a queda, e depois disso estas 2 condições não sejam verificadas a cada tic, e esperar até que o indicador atinja 0,9980 ou menos. Assim que todas as condições forem cumpridas, abrimos uma ordem de mercado para vender 0,1 lote com um stop loss de 400p e tirar lucro de 400p.
 
skyjet:

ou seja, na minha versão

if(OrdersTotal()>1)return;

?

Melhor ainda a primeira opção, colocar antes de tentar abrir um pedido(OrderSend)