[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 124

 
Notter:

Buon pomeriggio,

Potresti per favore dirmi come mettere un marcatore sul grafico? Per esempio, l'ordine non si è aperto, ma almeno per vedere sul grafico, a che punto avrebbe dovuto aprirsi.

Vorrei mettere un marcatore su un grafico.

Come questo

#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:


Sì, scusa, mi sono confuso, è la prima volta che scrivo sul forum. Prima ho copiato, poi ho deciso di scrivere a mano e mi sono confuso... Ma l'esempio di cui sopra è corretto...

MA1>MA2 e MA1<MA3 e MA3<MA4


Leggi il seguente thread
 
Vinin:


C'è qualcosa di strano qui.

MA1>MA2 e MA2>MA3 e poi MA1<MA3

Tanto più che è sufficiente

Sì, infatti, c'è una contraddizione tra le due cose. Solo che non ho esaminato tutto! L'autore ha ancora molta strada da fare per fare "errori difficili"!
 

La domanda è questa. Non è la prima volta che incontro questa situazione:

Se la funzione traal o breakeven viene chiamata ad ogni tick, per esempio, apparirà un errore 1. Il che significa, secondo la documentazione

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

Se non la chiamate apertamente nella funzione start, cioè non scrivete semplicemente la funzione con i parametri direttamente in start, ma la chiamate su ogni barra, cioè non in un tick, allora non c'è errore...

Voglio dire così:

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

Perché così?

E, in generale, come viene attuato in modo più intelligente? Sarà un uso intensivo di risorse per ogni spunta?

 

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

Ho bisogno del vostro aiuto. Non capisco cosa sta succedendo.

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

{

a=10;

}

LacondizioneOrderStopLoss()=1.3017 eNormalizeDouble(t6,5)=1.3017 è ancora valida, cioè a=10. Ma non dovrebbe essere soddisfatto.

Quale può essere la ragione di questo?

 
hoz:

La domanda è questa. Non è la prima volta che incontro questa situazione:

Se la funzione traal o breakeven viene chiamata ad ogni tick, per esempio, apparirà un errore 1. Il che significa, secondo la documentazione

Se non chiamato apertamente nella funzione start, cioè non solo inserito funzione con parametri direttamente in start, ma chiamato su ogni barra, cioè non per tick, allora errore - no...

Voglio dire così:

Perché così?

E in generale, come viene implementato in modo più intelligente? Sarà un uso intensivo di risorse per ogni spunta?

Vi consiglio di non andare per barre, per tanti pip. Se necessario, è a questo che servono le risorse. E l'errore "nessun errore" si verifica quando il prezzo viene ripetuto per una modifica che esiste già. Ecco perché devi farlo passo dopo passo, come ti ho consigliato all'inizio.
 
hoz:

La domanda è questa. Non è la prima volta che incontro questa situazione:

Se la funzione traal o breakeven viene chiamata ad ogni tick, per esempio, apparirà un errore 1. Il che significa, secondo la documentazione

Se non chiamato apertamente nella funzione start, cioè non solo inserito funzione con parametri direttamente in start, ma chiamato su ogni barra, cioè non per tick, allora errore - no...

Voglio dire così:

Perché così?

E, in generale, come viene attuato in modo più intelligente? Sarà un uso intensivo di risorse per ogni tick?

Trawl cerca di spostare SL allo stesso livello. Dobbiamo aggiungere un controllo, il livello di trawl dovrebbe essere diverso dall'attuale SL.

 
valeryk:

La rete a strascico cerca di spostare lo SL allo stesso livello. Un controllo dovrebbe essere aggiunto, il livello di pesca a strascico deve essere diverso dall'attuale SL.



Ho un assegno per questo:

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

}
Se stop - nuovo stop (in b.u.) non è zero... poi modifichiamo... In caso contrario, non modifichiamo. Ecco perché non mi è chiaro come questo accada. Dopotutto, capisco che devo controllare l'uguaglianza tra la fermata passata e quella nuova e l'ho fatto.
 

Ciao, per favore consigliatemi come posso modificare il mio ordine iniziale e finale a 1 T/P grazie

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:

Ciao, per favore consigliatemi come posso modificare il mio ordine iniziale e finale a 1 T/P grazie


Modifica questo codice in modo che non sembri un hack
Motivazione: