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

 
shtr:

Uau!!! Obrigado! Isto requer alguma reflexão.

Talvez haja um "auto-estudo" sobre as novas regras em algum lugar? O número de página de 4 dígitos é um pouco estressante.

Quem é fácil agora... Há mais 5 tópicos deste tipo sobre novatos no arquivo ))))

Para ser honesto, exemplos de ajuda e codobase são suficientes se você já tem experiência em programação, de preferência em C++. Se você não tem nenhuma experiência, você pode estudar primeiro um tutorial C++, MQL é muito semelhante em sintaxe.

 
evillive:

Quem tem agora facilidade... Há mais 5 tópicos deste tipo sobre novatos no arquivo ))))

Para ser honesto, exemplos de ajuda e codobase são suficientes se você já tem experiência em programação, de preferência em C++. Se você não tem nenhuma experiência, você pode estudar primeiro um tutorial C++, MQL é muito semelhante em sintaxe.

Nenhuma experiência = tutorial C++; )))

Obrigado por sua ajuda!

 

Boa tarde, Prezados Senhores!

Ajude-me a adicionar um alerta ao indicador quando aparecer uma setaindicando um par de moedas.

Eu mesmo tentei, mas como se costuma dizer, é difícil não saber e esquecer. Obrigado de antemão.



#janela_do_cartão_indicador de propriedade

#property indicator_buffers 4

#Indicador de propriedade_color1 Branco

#indicador de propriedade_color2 Branco

#Indicador de propriedade_color3 LightGreen

#indicador de propriedade_cores4 Vermelho


Exterior int CountBars = 300;

String externo FS = " ** Sensibilidade do filtro: Alto <-[1..3]-> Baixo ** ";

Intensibilidade externa Sensibilidade = 2;

duplo g_ibuf_92[];

duplo g_ibuf_96[];

duplo g_ibuf_100[];

duplo g_ibuf_104[];

int gi_unused_108 = -1;


int init() {

IndicatorBuffers(4);

SetIndexStyle(2, DRAW_ARROW);

SetIndexArrow(2, 233);

SetIndexBuffer(2, g_ibuf_92);

SetIndexStyle(3, DRAW_ARROW);

SetIndexArrow(3, 234);

SetIndexBuffer(3, g_ibuf_96);

SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 3, White);

SetIndexBuffer(0, g_ibuf_100);

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 3, White);

SetIndexBuffer(1, g_ibuf_104);

SetIndexEmptyValue(0, 0);

SetIndexEmptyValue(1, 0);

SetIndexEmptyValue(2, 0);

SetIndexEmptyValue(3, 0);

SetIndexLabel(2, "Buy Signal");

SetIndexLabel(3, "Sell Signal");

SetIndexLabel(0, "Alto");

SetIndexLabel(1, "Baixo");

SetIndexEmptyValue(0, EMPTY_VALUE);

SetIndexEmptyValue(1, EMPTY_VALUE);

SetIndexEmptyValue(2, EMPTY_VALUE);

SetIndexEmptyValue(3, EMPTY_VALUE);

string ls_0 = "Scalper Signal" (Sinal de Escalpador);

IndicatorShortName(ls_0);

se (Sensibilidade < 1) Sensibilidade = 1;

se (Sensibilidade > 3) Sensibilidade = 3;

retorno (0);

}


int deinit() {

retorno (0);

}


double sellSignal(int ai_0) {

bool li_4 = VERDADEIRO;

se (Sensibilidade > 2)

if (iHigh(Symbol(), Period(), ai_0 + 6) >= iHigh(Symbol(), Period(), ai_0 + 5))) li_4 = FALSO;

se (Sensibilidade > 1)

if (iHigh(Symbol(), Period(), ai_0 + 5) >= iHigh(Symbol(), Period(), ai_0 + 4))) li_4 = FALSO;

se (Sensibilidade > 0)

if (iHigh(Symbol(), Period(), ai_0 + 4) >= iHigh(Symbol(), Period(), ai_0 + 3))) li_4 = FALSO;

se (li_4) {

if (iClose(Símbolo(), Period(), ai_0 + 2) < iHigh(Símbolo(), Period(), ai_0 + 3))

if (iClose(Símbolo(), Period(), ai_0 + 1) < iLow(Símbolo(), Period(), ai_0 + 3))) return (iHigh(Símbolo(), Period(), ai_0 + 3) + 10.0 * Ponto)

}

retorno (0);

}


double buySignal(int ai_0) {

bool li_4 = VERDADEIRO;

se (Sensibilidade > 2)

if (iLow(Symbol(), Period(), ai_0 + 6) <= iLow(Symbol(), Period(), ai_0 + 5))) li_4 = FALSE;

se (Sensibilidade > 1)

if (iLow(Symbol(), Period(), ai_0 + 5) <= iLow(Symbol(), Period(), ai_0 + 4))) li_4 = FALSE;

se (Sensibilidade > 0)

if (iLow(Symbol(), Period(), ai_0 + 4) <= iLow(Symbol(), Period(), ai_0 + 3))) li_4 = FALSE;

se (li_4) {

if (iClose(Símbolo(), Period(), ai_0 + 2) > iLow(Símbolo(), Period(), ai_0 + 3))

if (iClose(Símbolo(), Period(), ai_0 + 1) > iHigh(Símbolo(), Period(), ai_0 + 3))) return (iLow(Símbolo(), Period(), ai_0 + 3) - 10.0 * Ponto)

}

retorno (0);

}


int start() {

int li_0 = IndicatorCounted();

se (li_0 < 0) retornar (-1);

se (li_0 > 0) li_0--;

int li_4 = Barras - li_0;

para (int l_count_8 = 0; l_count_8 < li_4; l_count_8++) {

g_ibuf_92[l_count_8 + 3] = buySignal(l_count_8);

g_ibuf_96[l_count_8 + 3] = sellSignal(l_count_8);

if (buySignal(l_count_8) > 0.0 || sellSignal(l_count_8) > 0.0) {

g_ibuf_100[l_count_8 + 3] = iHigh(Symbol(), Period(), l_count_8 + 3);

g_ibuf_104[l_count_8 + 3] = iLow(Symbol(), Period(), l_count_8 + 3);

}

}

retorno (0);

}

Arquivos anexados:
 

Olá escavadores.

Estou ficando um pouco desonesto com o resultado do histórico do pedido.

Estratégia:

1-Abrir 2 pedidos em diferentes direções (bloqueio na verdade) com uma parada curta e um lucro longo.

Se o preço se mover firmemente para fora da faixa de variação, ele derrubará a parada de uma das ordens, e irá para um lucro longo sobre a outra ordem.

3 - Quando a parada de uma das ordens é atingida, uma ordem pendente é colocada no nível de sua abertura, e se o preço voltar, a ordem é aberta novamente

e voltamos ao estado de posição até o próximo passo para o lucro através do knock-out da parada curta.

Objetivo:

Para rastrear 3 nocauteadas, pois na 4ª ordem, Martin é acionado. O problema é que algo dá errado. Eu determino a rentabilidade do pedido pelo histórico OrderProfit(),

Mas ainda não entendo como funciona a OrderHistoryTotal(). A função verifica o número do pedido ou a quantidade do pedido?

Da mesma forma, não entendo como interpretar a eliminação de uma posição (seja como uma perda ou como nada). Como posso rastrear 3 perdas consecutivas em uma situação como esta, quando a história mostra muitas outras coisas além das perdas?

 
Fartarantula:

Olá escavadores.

Estou ficando um pouco desonesto com o resultado do histórico do pedido.

Estratégia:

1-Abrir 2 pedidos em diferentes direções (bloqueio na verdade) com uma parada curta e um lucro longo.

Se o preço se mover firmemente para fora da faixa de variação, ele derrubará a parada de uma das ordens, e irá para um longo lucro sobre a outra ordem.

3 - Quando a parada de uma das ordens é atingida, uma ordem pendente é colocada no nível de sua abertura, e se o preço voltar, a ordem é aberta novamente

e voltamos ao estado de posição até o próximo passo para o lucro através do knock-out da parada curta.

Objetivo:

Para rastrear 3 nocauteadas, pois na 4ª ordem, Martin é acionado. O problema é que algo dá errado. Eu determino a rentabilidade do pedido pelo histórico OrderProfit(),

Mas ainda não entendo como funciona a OrderHistoryTotal(). A função verifica o número do pedido ou a quantidade do pedido?

Da mesma forma, não entendo como interpretar a eliminação de uma posição (seja como uma perda ou como nada). Como devo rastrear 3 perdas conseqüentes em uma situação como esta, quando o histórico mostra muitas outras informações além das perdas?

A primeira coisa a se lembrar é que uma ordem pendente não é uma ordem com prejuízo; ou foi acionada ou foi apagada.

A perda deve ser vista nas ordens de mercado (Comprar, Vender).

OrderHistoryTotal() retorna a quantidade de ordens no histórico de negociação disponível (incluindo depósito e retirada da conta, se a modalidade "histórico completo" for escolhida). O número 0 é geralmente o primeiro depósito, ou seja, a primeira ordem; o número OrderHistoryTotal()-1 é a última ordem na história.

Isto significa que temos que percorrer as ordens do último para o primeiro, contando as ordens pendentes e perdidas ao mesmo tempo.

Mas por que colocar ordens pendentes se podemos sempre esperar até o preço atingir o nível da ordem fechada na parada e abrir a ordem de uma vez, de acordo com o mercado? As ordens limitadas são um vínculo desnecessário neste caso, pois confundem a conta.

 
Fartarantula: Estratégia:

1-Abrir 2 pedidos em diferentes direções (fechadura real) com uma parada curta e um lucro longo.

2- Se o preço se mover firmemente para fora do intervalo, ele derrubará a parada de uma das ordens, e irá para um longo lucro na outra ordem.

Eu olhei sua estratégia através dos olhos do programador. Quando o preço sobe, ele chega ao Sell SL, então há um pedido de compra com seu SL e em algum lugar lá em cima TP. Neste caso, você conseguiu obter uma pequena perda na ordem fechada. Agora vamos considerar a variante com duas ordens pendentes. Em vez de abrir dois pedidos, vamos colocar dois pedidos pendentes nos próprios locais onde você tem SL. Quando o preço atinge o Buy Stopl, uma ordem de compra é aberta e nós temos a mesma posição, mas não há perda. E agora a coisa mais interessante. À medida que o preço sobe ...

 

...E à medida que o preço subiu em seu princípio, seu TP foi se afastando ainda mais. E você tem menos chances de ter lucro do que eu, se considerar nossas ações no momento.

E mesmo que eu não negocie em paralelo com você, então seu preço de referência está entre os pips, e o meu está de fato. E será sempre - você dá ao mercado uma parte do movimento direcional.

Se você não sabe, então você deve considerar que mesmo um infeliz 2 pontos de propagação transforma um sistema positivo em um sistema perdedor. A julgar pela primeira figura, você tem um spread de cerca de 20 pips em um spread de 5 dígitos,

porque a diferença entre os pedidos feitos simultaneamente "a olho nu" é de 40 pips de acordo com a figura.

Não é essa a questão... você precisa de um trecho de código, a detecção correta de uma série de 3 paradas eliminadas. Por que todos estão tentando corrigir o sistema? E a metodologia do referido camarada

também não vai funcionar. O mercado pode simplesmente não deixar você abrir, ou abrir onde você não deveria. Cara, eu entendo todos vocês, e seu desejo de compartilhar suas experiências. Mas eu só preciso rastrear três paradas.

Tudo está no lugar, só por acaso vi que perdi a ordem errada com um duplo. No final das contas, a Histototal deu o que achou melhor, e o laço de determinar uma ordem fechada por perda da história falhou a ordem.

 
Fartarantula Tudo está em jogo, só acidentalmente vi que eu tinha erroneamente falhado a ordem com a duplicação. No final das contas, a Histototal deu o que achou melhor, e o loop de determinação de uma ordem fechada por perda da história falhou a ordem.

Você precisa se afastar das qualificações do codificador e aprender as noções básicas de programação. Aqui estão mais detalhes... E aqui.

O problema é o seguinte. O que retorna, como diz o autor, Histototal neste roteiro sobre a mesma conta no domingo.

void OnStart()
{
  Alert("Cчет " + DoubleToStr(AccountNumber(), 0),
        "  Дата ", TimeToStr(TimeLocal(),TIME_DATE),
        "  Ордеров ", OrdersHistoryTotal());
}

Por que diferente?

Se houver menos e mais pedidos em uma conta, então 0 228 228 216 98? E se houver menos pedidos, o processamento é mais rápido!

O cliente está suando - é impossível trabalhar, o terminal está com falhas, a Histototal deu o que queria, o loop pulou!

 

Boa tarde a todos. Ajude-me a levantar as setas no indicador, as inferiores estão ok, mas as superiores estão em cima dos castiçais.

Eu tentei ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20); não funcionou. O ponto de ancoragem da flecha (objeto) está no topo, como eu o movo para cima?

//display signal arrow 
      RefreshRates(); 
   
      if(   (High[i+1]  >upBuffer[i+1] ) 
         && (Close[i+1] >Open[i+1]     ) 
         && (Close[i]   <Open[i]       ) 
        )            
      {  //draw a dot on top of the bar
         string Arrow_name_jack1 = "AboveTopBand_SellBar_jack1_" + TimeToStr(Time[i],TIME_DATE|TIME_SECONDS);  //TimeCurrent()
         ObjectCreate(Arrow_name_jack1, OBJ_ARROW, 0, Time[i], High[i]+iATR(NULL,0,20,i)/5);//5*pips);  //OBJ_ARROW=22,window=0,
//???????????? так не получилось         //  ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20);
            ObjectSet(Arrow_name_jack1, OBJPROP_ARROWCODE, 242          );  //159
            ObjectSet(Arrow_name_jack1, OBJPROP_COLOR,     Yellow    );  //Magenta
            ObjectSet(Arrow_name_jack1, OBJPROP_STYLE,     STYLE_SOLID  );
            ObjectSet(Arrow_name_jack1, OBJPROP_WIDTH,     2            ); 
            
      }
      else
      if (   (Low[i+1]   <dnBuffer[i+1] ) 
          && (Close[i+1] <Open[i+1]     ) 
          && (Close[i]   >Open[i]       ) 
         )            
      {  //draw a dot on top of the bar
          Arrow_name_jack1 = "BelowBotBand_BuyBar_jack1_" + TimeToStr(Time[i],TIME_DATE|TIME_SECONDS);//TimeCurrent()
         ObjectCreate(Arrow_name_jack1, OBJ_ARROW, 0, Time[i], Low[i]-iATR(NULL,0,20,i)/5);//5*pips);  //OBJ_ARROW=22,window=0,
            ObjectSet(Arrow_name_jack1, OBJPROP_ARROWCODE, 241          );//159
            ObjectSet(Arrow_name_jack1, OBJPROP_COLOR,     Yellow   );//Magenta
            ObjectSet(Arrow_name_jack1, OBJPROP_STYLE,     STYLE_SOLID  );
            ObjectSet(Arrow_name_jack1, OBJPROP_WIDTH,     2            ); 
      }
   }//end for(i = limit; i >= 0; i--)
 
mikanit:

Boa tarde a todos. Ajude-me a levantar as setas no indicador, as inferiores estão ok, mas as superiores estão em cima dos castiçais.

Eu tentei ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20); não funcionou. O ponto de ancoragem da flecha (objeto) está no topo, como movê-la para cima?

ObjectSetInteger(0,Arrow_name_jack1,OBJPROP_ANCHOR,ANCHOR_BOTTOM);

Recomendo o uso de variáveis separadas para armazenar os nomes das setas superior e inferior, para evitar confusão.

E sim, desenhar setas no indicador com objetos é uma perversão. Há amortecedores indicadores:

SetIndexStyle(0,DRAW_ARROW,0,1,clrRed);

    SetIndexArrow(0,242);