Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 748

 
AlexeyVik:


E questo codice

è meglio scrivere in init() e meglio non così

e poi in start()

Ho bisogno di un buy stop seguito da un frattale trailing dietro il prezzo e un sell stop con la stessa procedura.
 
xant:
Ritiro la domanda, l'ho capito da solo.
Non è una buona idea decompilare. Consiglio di rielaborare completamente il codice
 
Petiyashaket:
Ho bisogno di un buy stop trainato (modificato) da frattali di prezzo fino all'innesco e di un sell stop allo stesso modo.

Quindi la domanda nel tuo codice, evidenziata in rosso.

if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
        { // К чему относится эта скобка???
        for (int pos=0;pos==OrdersTotal();pos++)
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
        } // это пара к той...
     
       }  

Non hai ancora risposto. Non so cosa farci, ma il risultato dell'esecuzione del codice sarà diverso.

 
AlexeyVik:

Quindi la domanda nel tuo codice, evidenziata in rosso.

Non hai ancora risposto. E da questo il risultato dell'esecuzione del codice sarà diverso.

Perché usateVolume[0]<2 nella condizione?

A volte in una zecca ce n'è un mucchio. E su questa barra la condizione non funziona più.

 
Vinin:

Perché usiVolume[0]<2 nella condizione?

A volte ce ne sono un mucchio in una sola zecca. E su questa barra la condizione non funzionerà più

Victor, questa domanda non è per me. Io uso questa funzione.

bool NewBar()
{
   static datetime lastbar = iTime(_Symbol, PERIOD_H1, 0); // Период можно менять по желанию
   datetime curbar = iTime(_Symbol, PERIOD_H1, 0);         // и будет отсчитывать новый бар заданного периода на любом ТФ
   if(lastbar != curbar)
    {
     lastbar = curbar;
     return (true);
    }
   else return(false);
}//******************************************************************|

Ho copiato un pezzo di codice per fare una domanda sulle parentesi.

 
Vinin:

Perché usiVolume[0]<2 nella condizione?

A volte ce ne sono un mucchio in una sola zecca. E su questa barra la condizione non funzionerà più

Questo è ciò che insegna Oleg Remizov su YouTube. Questa condizione limita il trading sulle notizie e la cattura delle perdite :)
 
Petiyashaket:
Questo è ciò che insegna Oleg Remizov su YouTube, questa condizione limita il trading sulle notizie e la cattura di alci :)
Non ho niente da dire su Remizov. Ma non offendetevi se al vostro codice mancheranno le barre. Va bene, se avete un codice di un minuto (su che tempi, ovviamente), ma se avete intenzione di correre su un'ora o più - ci sarà solo pietà per voi.
 
AlexeyVik:

Quindi la domanda nel tuo codice, evidenziata in rosso.

non ha mai ricevuto risposta. E questo renderà diverso anche il risultato dell'esecuzione del codice.

Ho sperimentato le parentesi in diversi modi, le ho tolte e aggiunte, il risultato è lo stesso
 
Petiyashaket:
Ho sperimentato le parentesi in diversi modi, le ho tolte e aggiunte, il risultato è lo stesso

Non c'è bisogno di sperimentare, è necessario capire il significato di queste parentesi e come applicarle. È scritto nella documentazione, non voglio leggere una lezione su questo.

if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)

        for (int pos=0;pos==OrdersTotal();pos++)
        { // наверное сюда её надо
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
        } // это пара к той...
     
       }  
Ma questa è solo una parte del codice. C'è un problema simile più avanti.
 
//+------------------------------------------------------------------+
//|                                                   Strategy 3.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property copyright ""
#property link      ""
#include <Library1.mqh>
extern int Magic=111;
extern int TP=20;
extern int SL=30;
extern int Trall_dist=10;
extern int Shag=10;
extern bool Isp_shag=false;
extern bool Isp_bezubitok=false;
extern double Lot=0.1;
double SS=0,BS=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  double tp,sl;
  if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;}
  else if(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;}
  double Up=iFractals(Symbol(),0,MODE_UPPER,3);
  double Down=iFractals(Symbol(),0,MODE_LOWER,3);
//----
  if(Up>0&&Down==0&&Volume[0]<2)
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);
 //----   
    for (int pos=0;pos==OrdersTotal();pos++)
        {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),High[3]+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
        } 
    } 
  else if(Up==0&&Down>0&&Volume[0]<2)
    {
    if((Bid-Low[3]-5*Point)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))
    OrderSend(Symbol(),OP_SELLSTOP,Lot,Low[3]-5*Point,20,Low[3]+sl,Low[3]-tp,NULL,Magic,0,Red);
    for (pos=0;pos==OrdersTotal();pos++)
        {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_SELLSTOP)
          {
          OrderModify(OrderTicket(),Low[3]-5*Point,Low[3]+sl,Low[3]-tp,0,CLR_NONE);
          }      
        }     
    }    
   
            
    if(OrdersTotal()>0)
    Trailing_stop(Magic,Symbol(),Trall_dist,Shag,Isp_shag,Isp_bezubitok);
    return(0);
  }
//+------------------------------------------------------------------+
Se me lo spieghi in una linea di codice e con commenti, come nel mio codice precedente, te ne sarò molto grato.