Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 479

 
Vladislav Andruschenko:
Spread, se impostato su current. Data di fine test se fatturata come corrente. Ci potrebbero essere molte altre ragioni.

Spread fisso, data di fine 01.01.18

 
Aidar Kaliaskar:

Spread fisso, Data di fine 01.01.18


costo per punto..... ecc.


provare questo fine settimana.

 

Sto cercando di creare un indicatore in MQL4, che tracci una linea sul grafico "US.500+" per i prezzi di chiusura da "US.30+". In generale, le linee di prezzo di due simboli sarebbero visibili su un grafico. Qui sotto c'è il codice, ma non funziona. Nel messaggio di log "l'indicatore sul buffer personalizzato non è ancora supportato". Insegnami perché non funziona. Opps.

#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_color1 clrRed
#property indicator_style1 STYLE_DOT
#property indicator_type1  DRAW_LINE
//---
input string   symbolName="US.30+"; // Symbol name
input double   difference=-22387.0; // Difference from other symbol
//--- price buffer for other symbol
double otherSymbol[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,otherSymbol,INDICATOR_DATA);
//---
   return INIT_SUCCEEDED;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int     rates_total,
                const int     prev_calculated,
                const int     begin,
                const double &price[])
  {
//---
   for(int i=prev_calculated;i<rates_total;i++)
      otherSymbol[i+1]=iClose(symbolName,PERIOD_CURRENT,i)+difference;
   ArraySetAsSeries(otherSymbol,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
Maxim Khrolenko:

Sto cercando di creare un indicatore in MQL4, che tracci una linea sul grafico "US.500+" per i prezzi di chiusura da "US.30+". In generale, le linee di prezzo di due simboli sarebbero visibili su un grafico. Qui sotto c'è il codice, ma non funziona. Nel messaggio di log "l'indicatore sul buffer personalizzato non è ancora supportato". Insegnami perché non funziona. Opps.

Perché dovete usare la prima forma di chiamata.
 
Artyom Trishkin:
Perché dovete usare la prima forma di chiamata.
L'ho cambiato e... ha funzionato! Grazie mille.
 
STARIJ:

Ho trovato la ragione - 60 secondi dovrebbero essere contati fuori da un ciclo

Grazie, grazie per il chiarimento.

Se invece di 60 secondi saranno 300.

Itempi di apertura delle posizioni sono diversi, è necessario scrivere 300 secondi oltre al tempo di apertura della posizione.

Come devo fare?

 
lil_lil Se è 300 invece di 60 secondi ... devi scrivere a intervalli di 300 secondi dal momento in cui la posizione è stata aperta, come fai?

Avete provato il mio programma? Non capisco bene 300... Se si imposta 300 invece di 60, è vero? Se mi dici come trarne profitto, cercherò di capire meglio!

 

Aiuto con l'EA, come sempre il problema è probabilmente banale, ma non ho risolto l'enigma

Dovrebbe aprire l'acquisto seema>smma daema o non raggiungere ilpunto(lo stesso per la vendita). Dovrebbe chiudere l'affare alla chiusura del bar-aprire un nuovo bar. Il successivo si apre allo stesso modo, ma con una condizione superiore alprezzo di apertura del precedente, cioèlast_order_price.

Ma alla fine si apre dove vuole e si chiude. (All'inizio del test si apre e si chiude immediatamente)

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

input int MA_period=10;
input int take=200, stop=200, Magic=1104;
input double lot=0.05;
input int slippage=30;
input int point=5;
double last_order_price,fast_MA,slow_MA;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   fast_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_EMA,PRICE_CLOSE,0);
   slow_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_SMMA,PRICE_CLOSE,0);
 
   if(fast_MA>slow_MA) last_order_price=0;
      else last_order_price=Ask+stop*_Point;

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   fast_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_EMA,PRICE_CLOSE,0);
   slow_MA=iMA(Symbol(),PERIOD_CURRENT,MA_period,0,MODE_SMMA,PRICE_CLOSE,0);
   
   if(Bid<=fast_MA+point*_Point && Bid>=fast_MA && fast_MA>slow_MA && SymOrder() && Bid>last_order_price)
   {
      OrderSend(Symbol(),OP_BUY,lot,Ask,slippage,Ask-stop*_Point,Ask+take*_Point,NULL,Magic,0,clrBlue);
      last_order_price=Bid;
   }
   
   if(Bid>=fast_MA-point*_Point && Bid<=fast_MA && fast_MA<slow_MA && SymOrder() && Bid<last_order_price)
   {
      OrderSend(Symbol(),OP_SELL,lot,Bid,slippage,Bid+stop*_Point,Bid-take*_Point,NULL,Magic,0,clrRed);   
      last_order_price=Bid;
   }
      
   if(!SymOrder() && Volume[0]<2 && OrderType()==OP_BUY)
   {
      OrderClose(OrderTicket(),lot,Bid,slippage,clrWhite); 
      
   }
   if(!SymOrder() && Volume[0]<2 && OrderType()==OP_SELL)
   {
      OrderClose(OrderTicket(),lot,Ask,slippage,clrWhite);  

   }     
      
  }
//+------------------------------------------------------------------+
bool SymOrder()
{
   for(int i=0; i<OrdersTotal(); i++)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) return false;
      }

   return true;
}
 
Roman Sharanov:

Aiuto con l'EA, come sempre il problema è probabilmente banale, ma non ho risolto l'enigma

Dovrebbe aprire l'acquisto seema>smma daema o non raggiungere ilpunto(lo stesso per la vendita). Dovrebbe chiudere l'affare alla chiusura del bar-aprire un nuovo bar. Il successivo si apre allo stesso modo, ma con una condizione superiore alprezzo di apertura del precedente, cioèlast_order_price.

Ma alla fine si apre dove vuole e si chiude. (All'inizio del test si apre e si chiude immediatamente)

Come posso suggerire? Salvare il codice negli appunti, scriverlo nell'Expert Advisor ed eseguirlo nel tester delle strategie? Bene, vedrò che si apre e si chiude. E allora? Potrei eseguirlo su una demo - oggi è sabato, domani è domenica, il mercato è chiuso. Devi guardarli con gli occhi? Beh, dovete tenere a mente i valori di tutte le variabili. Prima c'era un metodo di debugging con carta e penna - provatelo. Puoi anche mettere un Alert("Bid=", Bid, Fast+P=",Fast_Ema+point*_Point," ....) prima di tutti gli OrderSelect e OrderClose e impostare un giorno nel tester per esempio dal 19 al 20 febbraio e poi dopo il test aprire il log, fare una copia, cancellare le linee inutili e analizzare. Il MetaEditor ha anche una funzione di debug. Quando si impara a fare il debug ... sarà fantastico.
 

Dove si trova il pulsante?

Potete dirmi come allineare il testo nel controllo CSpinEdit da #include <Controls\SpinEdit.mqh> (campo di testo con incremento).

Di default è allineato al bordo sinistro, ma io voglio che sia allineato a destra.