[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 279

 

Se você sabe, há duas linhas, uma seguindo os novos altos em uma série de candelabros, a outra seguindo os baixos. Quando a distância entre as linhas é superior a 50, uma linha vertical deve ser traçada. A linha vertical precisa de uma coordenada - tempo. Como posso desenhar o tempo quando a distância entre as linhas será superior a 50? Eu mesmo não consigo pensar em nada.

Eu queria traçar a linha vertical usando ObjectCreate... Se pode ser feito sem tempo, o que deve ser usado?
 
waitra >> :

Poderia haver uma função que simplesmente detecte que "ainda não há ordens na história da EA"? - Isso seria suficiente.

Eu não sei. Talvez alguém aqui possa nos dizer ?

Acho que devemos tentar modificar a função de Kim. Este aqui:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru            |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                  |
//|  Описание : Возвращает количество позиций.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                            |
//|    sy - наименование инструмента   (""   - любой символ,  |
//|                                     NULL - текущий символ)          |
//|    op - операция                   (-1   - любая позиция)       |
//|    mn - MagicNumber                (-1   - любой магик)               |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()== sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op) {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}  return( kp);}

Isto é, em vez de MODE_TRADES, pegue MODE_HISTORY - isto é, a ordem é selecionada entre as ordens fechadas e apagadas.

Em seguida (mudar o nome do f-i) :

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru            |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                  |
//|  Описание : Возвращает кол-во ордеровиз истории счета  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                           |
//|    sy - наименование инструмента   (""   - любой символ, |
//|                                     NULL - текущий символ)        |
//|    op - операция                   (-1   - любая позиция)       |
//|    mn - MagicNumber                (-1   - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfPos_HISTORY (string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY )) {
      if (OrderSymbol()== sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op) {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}  return( kp);}

Experimente, - vai funcionar ou não?

 

Boa tarde, amigos.


Por favor, me aconselhem sobre isto.


Por exemplo, eu preciso abrir uma posição quando uma "vela de preço" cruzou uma média móvel.

Até agora, só sei classificar os sinais quando um castiçal fechou/abriu acima/abaixo da média...

( iMA( .....) >Fechar[1] ou iMA(....) >Abrir[0] )

Como posso entrar quando a vela atual já está acima/abaixo do MA, em vez de esperar que a atual feche e que a próxima abra?


Muito obrigado de antemão.

 
Morzh09 >> :

Boa tarde, amigos.


Por favor, me aconselhem sobre isto.


Por exemplo, eu preciso abrir uma posição quando uma "vela de preço" cruzou uma média móvel.

Até agora, só sei classificar os sinais quando um castiçal fechou/abriu acima/abaixo da média móvel...

( iMA( .....) >Fechar[1] ou iMA(....) >Abrir[0] )

Como posso entrar quando a vela atual já está acima/abaixo da MA, em vez de esperar que a atual feche e a próxima abra, se já está acima/abaixo da MA?


Eu não sei o que fazer com ele.

O que você acha disso?

iMA(....) >Open[0] ? - zero é a vela atual.

 
rid >> :

O que não é para se gostar:

iMA(....) >Open[0] ? - zero é o candelabro atual

é verdade, mas, por exemplo, há casos em que, após a abertura sob o MA, o preço então (geralmente nas notícias) quebra o MA em uma longa vela e sobe, desce....

Se usarmos meu critério de abertura, podemos perder tais movimentos.

Portanto, eu gostaria de abrir uma posição se o preço estiver atualmente acima/abaixo da média, em vez de esperar que esta feche e que a próxima vela abra.

 

Isto poderia ser :

if (  iMA(.... .... , 1) >Close[1]  && iMA(.... ... , 0) < Open[0]  ) // продажа

(Se o MA na barra anterior for maior que o preço fechado da barra anterior e o MA na barra atual se tornar menor que o preço aberto da barra atual, então venda)

 

Há dois dias estou brincando e não consigo entender. Peguei o código do tutorial de Kovalev e tentei abrir uma ordem de compra e recebi a resposta "Erro 130".

Código

nt f_Open_Ord(int Tip)
{
int Ticket, // Número de pedido
MN; // MagicNumber

double SL, // StopLoss (valor relativo do preço)
TP; // TakeProf (valor relativo do preço)
// 3 --
while(g_Mas_Tip[Tip]==0) // Desde que .
{ //...no success
if (SL<g_Level_new) // if less than allowed...
SL=(g_Level_new+20); // ... então permitido
if (TP<g_Level_new)
// Se menos do que permitido...
TP=(g_Novo_nível+20); // .então permitido
MN=TimeCurrent(); // Simple MagicNumber
f_Inform(13,Tip); // Mensagem na tentativa de abrir
se (Tip==0) // Vamos abrir Buy
{
SL=Bid - SL*Point; // StopLoss (preço)
SL=NormalizeDouble(SL,Digits);
TP=Bid + TP*Point; // TakeProfit (preço)
TP=NormalizeDouble(TP,Digits);
Ticket=OrderSend(Symbol(),0,g_Lots_New,Ask,5,1.46500,1.47500,",MN);
err=GetLastError();
Comment("error number ",err);
if (Ticket>0) f_Inform(4);
//if (Ticket<0) f_Inform(25)

O código foi retrabalhado, tudo funciona corretamente, acho que o erro não está no código. DC-Broco/.

 

Sorri, isso foi precipitado. Os valores 1,46500 e 1,47500 na função OrderSend devem ser alterados para SL e TP respectivamente

 
VNG писал(а) >>

Sorri, isso foi precipitado. Os valores 1,46500 e 1,47500 na função OrderSend devem ser substituídos por SL e TP, respectivamente

O que são iguais SL e TP? Se for zero, como no código acima, tudo está correto. Deve ser gerado um erro

 

As paradas são retiradas da variável global g_Level_new, que é calculada como g_Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL )