[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 124

 
Notter:

Boa tarde,

Você poderia me dizer como colocar um marcador na tabela? Por exemplo, a ordem não abriu, mas pelo menos para ver na tabela, em que ponto deveria ter aberto.

Eu gostaria de colocar um marcador em um gráfico.

Assim

#include <stderror.mqh>

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int Err;
//----
       if(...........) //покупаем
          { 
          Err=OrderSend(..................);
             if(Err<0)
                SetArrow(159, Blue,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
          }
       if(...........) //продаем
          { 
          Err=OrderSend(..................);
             if(Err<0)
                SetArrow(159, Red,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
          }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объект OBJ_ARROW.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
 
dertop:


Sim, desculpe ter ficado confuso, escrevendo pela primeira vez no fórum. Copiou primeiro, depois decidiu escrever à mão e ficou confuso. Mas o exemplo acima está correto...

MA1>MA2 e MA1<MA3 e MA3<MA4


Confira a seguinte linha
 
Vinin:


Há algo de estranho aqui.

MA1>MA2 e MA2>MA3 e depois MA1<MA3

Tanto mais que é suficiente para

Sim, de fato, há uma contradição entre os dois. Eu simplesmente não investiguei tudo! O autor ainda tem um longo caminho a percorrer para cometer "erros difíceis"!
 

A questão é esta. Esta não é a primeira vez que me deparo com esta situação:

Se a função traal ou breakeven for chamada em cada tick, por exemplo, aparecerá um erro 1. O que significa, de acordo com a documentação:

ERR_NO_RESULT   1       Нет ошибки, но результат неизвестен

Se não for chamada abertamente na função de início, ou seja, não apenas a função inserida com parâmetros diretamente no início, mas chamá-la em todas as barras, ou seja, não por tiquetaque, então erro - não...

Quero dizer, desta forma:

int start()
{
   MovingStopLossToBU();
// Что-то дальше делаем..

Por que assim?

E, em geral, como é implementado de forma mais inteligente? Será intensivo em recursos a cada carrapato?

 

Всем добрый день.

Eu preciso de sua ajuda. Eu não entendo o que está acontecendo.

se (OrderStopLoss() != NormalizeDouble(t6,5))

{

a=10;

}

AcondiçãoOrderStopLoss()= 1.3017 eNormalizeDouble(t6,5)=1.3017 ainda se mantém, ou seja, a=10. Mas não deve ser satisfeita.

Qual pode ser a razão para isso?

 
hoz:

A questão é esta. Esta não é a primeira vez que me deparo com esta situação:

Se a função traal ou breakeven for chamada em cada tick, por exemplo, aparecerá um erro 1. O que significa, de acordo com a documentação:

Se não for chamada abertamente na função de início, ou seja, não apenas a função inserida com parâmetros diretamente no início, mas chamá-la em todas as barras, ou seja, não por tiquetaque, então erro - não...

Quero dizer, desta forma:

Por que assim?

E em geral, como é implementado de forma mais inteligente? Será intensivo em recursos a cada carrapato?

Eu o aconselharia a não ir por bares, por tantos pips. Se necessário, é para isso que servem os recursos. E o erro "nenhum erro" ocorre quando o preço é repetido para uma modificação que já existe. É por isso que você tem que fazer isso passo a passo, como eu o aconselhei no início.
 
hoz:

A questão é esta. Esta não é a primeira vez que me deparo com esta situação:

Se a função traal ou breakeven for chamada em cada tick, por exemplo, aparecerá um erro 1. O que significa, de acordo com a documentação:

Se não for chamada abertamente na função de início, ou seja, não apenas a função inserida com parâmetros diretamente no início, mas chamá-la em todas as barras, ou seja, não por tiquetaque, então erro - não...

Quero dizer, desta forma:

Por que assim?

E, em geral, como é implementado de forma mais inteligente? Vai ser intensivo em recursos a cada carrapato?

A rede de arrasto tenta mover o SL para o mesmo nível. Precisamos adicionar uma verificação, o nível da rede de arrasto deve ser diferente do SL atual.

 
valeryk:

A rede de arrasto tenta mover o SL para o mesmo nível. Um controle deve ser adicionado, o nível da rede de arrasto deve ser diferente do SL atual.



Eu tenho um cheque para isso:

if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
{
  if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
  {
    Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
  }

}
Se parada - nova parada (em b.u.) não é zero... então modificamos... Caso contrário, não modificamos. É por isso que não está claro para mim como isto acontece. Afinal, entendo que preciso verificar a igualdade entre as paradas passadas e as novas paradas e já o fiz.
 

Olá! por favor, informe como posso modificar meu pedido inicial e final para 1 T/P, obrigado

gi_304 = CountTrades();

   g_price_212 = 0;

   double ld_24 = 0;

   for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

      OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

      if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

      if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

         if (OrderType() == OP_BUY || OrderType() == OP_SELL) {

            g_price_212 += OrderOpenPrice() * OrderLots();

            ld_24 += OrderLots();

         }

      }

   }

   if (gi_304 > 0) g_price_212 = NormalizeDouble(g_price_212 / ld_24, Digits);

   if (gi_332) {

      for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

         OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

         if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

            if (OrderType() == OP_BUY) {

               g_price_180 = g_price_212 + TakeProfit2 * Point;

               gd_unused_196 = g_price_180;

               gd_308 = g_price_212 - Stoploss * Point;

               gi_268 = TRUE;

            }

         }

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

            if (OrderType() == OP_SELL) {

               g_price_180 = g_price_212 - TakeProfit2 * Point;

               gd_unused_204 = g_price_180;

               gd_308 = g_price_212 + Stoploss * Point;

               gi_268 = TRUE;

            }

         }

      }

   }

   if (gi_332) {

      if (gi_268 == TRUE) {

         for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

            OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

            if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

            if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) OrderModify(OrderTicket(), g_price_212, OrderStopLoss(), g_price_180, 0, Yellow);

            gi_332 = FALSE;

         }

      }

   }

   return (0);


 
agat8430:

Olá! por favor, informe como posso modificar meu pedido inicial e final para 1 T/P, obrigado


Edite este código para que ele não pareça um hack