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

 
hoz:


Ieri ero di fretta, dovevo andare. Ho scritto la domanda in quel momento non quella che volevo.

In realtà, intendevo Expert Advisors che, sotto una data condizione, inviano un gruppo di ordini (una griglia). Non ho visto in tali Expert Advisors che né spread, né stop-loss, né posizione di prezzo sopra (sotto Asc o Bid), né altro viene controllato. Lo scriverò io stesso e lo mostrerò a tutti.


Perché prendere come esempio alcuni esperti di gore? Al minimo sono solo per il tester, al massimo sono scritti con le mani storte, come detto sopra...
 
alsu:

Perché prendere come esempio alcuni esperti di guai? Al minimo sono solo per il tester, al massimo sono scritti con le mani storte, come detto sopra...

Beh, ho capito come implementarlo, ma ho deciso di vedere come lo fanno gli altri.
 

Ragazzi, ho un problema davvero orribile! Il mio grafico non si sposta a sinistra quando salvo il disegno! La funzione "shift graph" è attivata! Come posso rimediare?


 

Ciao!

Voglio che il mio Expert Advisor non apra più di un trade al giorno. Puoi dirmi come fare?

 

Ciao, è da un po' che mi sto informando su mql4, forse uno dei programmatori esperti può aiutare. Voglio sapere come farlo bloccare quando l'ordine raggiunge -30 o -40. Devo aggiungere alcune proprietà per questo script per bloccare gli ordini non appena vanno in meno.

void start()
{
double StopLoss;
double Lots=0;
for(int i=0;i<OrdersTotal();i++)
{
if(!OrderSelect(i,SELECT_BY_POS))
continua;
if(OrderSymbol()!=Symbol())
continua;
if(OrderType()==OP_BUY)
Lots+=OrderLots();
if(OrderType()==OP_SELL)
Lots-=OrderLots();
}
if(Lots>0)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,0,NULL,Red);
if(Lots<0)
OrderSend(Symbol(),OP_BUY,-(Lots),Ask,3,Bid-StopLoss*Point,0,NULL,Blue);

 
protey7:

Ciao!

Voglio che il mio Expert Advisor non apra più di un trade al giorno. Puoi dirmi come fare?

extern int MagicNumber=555;
//---
if (OrdersTotal()>0) // Есть ли отложенные ордера или открытые позиции
{  for (i=OrdersTotal()-1; i>=0; i--) // Перебираем ордера
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Oрдер выбирается среди открытых и отложенных ордеров
      {  if (OrderSymbol()!=Symbol()) continue; // Если торговый символ не тот, на котором работает эксперт - игнорируется
         if (OrderMagicNumber()!=MagicNumber) continue; // Если магик номер не тот, что надо - игнорируется
         if (OrderOpenTime()>=iTime(NULL,PERIOD_D1,0)) // Если время открытия ордера больше или равен началу открытия данной свечи,
                                                       // то дальший код эксперта не работает. Вместо PERIOD_D1 можно вставить любой другой период.
            return(0);
}  }  }
 
Wild_Wolf:

Ragazzi, ho un problema davvero orribile! Il mio grafico non si sposta a sinistra quando salvo il disegno! La funzione "shift graph" è attivata! Come posso rimediare?

Nota: sul grafico in alto a destra c'è un piccolo triangolo come questo. Quando ci passi sopra il cursore, appare un tooltipche dice "Chart shift". Agganciatelo e spostatelo a sinistra quanto basta per fare spazio a destra.
 
hoz:

Beh, ho capito come implementarlo, ma ho deciso di vedere come lo fanno gli altri.
E se gli altri cominciassero a saltare dalle finestre?
 
paladin80:


Grazie per il suggerimento!

Solo nella variante suggerita l'esperto non funziona)))) Ecco una variante funzionante che ho ottenuto:

if (OrdersTotal()==0) // Se non ci sono posizioni aperte

{ for (int i=OrdersHistoryTotal()-1; i>=0; i--) // Cerca gli ordini dalla lista della storia dell'account

{ if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) // l'ordine è selezionato tra gli ordini chiusi

{

if (OrderCloseTime()>=iTime(NULL,PERIOD_D1,0)) // Se il tempo di chiusura dell'ordine è maggiore o uguale all'inizio dell'apertura della candela corrente

// L'Expert Advisor non funziona. Qualsiasi altro periodo può essere inserito al posto di PERIOD_D1.

ritorno(-1);

} } }

 
alsu:

Perché prendete come esempio alcuni esperti di guai? Come minimo sono progettati esclusivamente per il tester, come massimo sono scritti con le mani storte, come è stato detto sopra...


L'ho scritto a modo mio. Non ho ottimizzato particolarmente il codice, l'ho solo scritto per farlo funzionare e mostrare la logica.

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_BUYSTOP,0.1,NormalizeDouble(Ask + (step*i) * pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_SELLSTOP,0.1,NormalizeDouble(Bid - (step*i)*pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Посылаем пачку ордеров на сервер                                                    |
//+-------------------------------------------------------------------------------------+
bool SendPackOfOrders(int lastPosTicket, int lastPosType, double initialOOP)
{
   if (lastPosTicket == -1)                        // Если нет рыночных ордеров, значит..
       return(false);                              //..сетку отложек не кидаем
       
  // if (lastPosType != g_lastPosType)               // Если тикет изменился, значит..
   {
      lastPosType = g_lastPosType;
      
      for (int i=1; i<=5; i++)
      {
         if (!OpenBuy(initialOOP, i))
             return(false);
         if (!OpenSell(initialOOP, i))
             return(false);
      }
   }
}

Il passo è la spaziatura della griglia dell'ordine.

La mia domanda è questa. La mia logica è corretta? C'è un modo per migliorare il codice in modo che funzioni più velocemente? Dal punto di vista delle prestazioni...

Ho anche un'idea che potremmo aver bisogno di fare delle pause dopo ogni messaggio. Bene, tutto sommato questi punti sono molto interessanti per me.