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

 
Igor Makanu:

probabilmente come questo, per la vendita:

profit=NormalizeDouble((OrderOpenPrice()-Ask)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2);

comprare per Bid, cioè ( Bid -OrderOpenPrice())

TakeProfit =100 punti Lot = 0.1, quanto sarà il profitto della posizione aperta nella valuta, quando la posizione è chiusa da TP?

profit=NormalizeDouble((OrderOpenPrice()-Тейк_Профит*Point)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2);

non funziona così.

 
Vitaly Muzichenko:

Necessità di operare:Lotto -> Soldi -> Distanza, e il costo della spunta

Il denaro è la cosa giusta per scoprirlo)

 
Vitaly Muzichenko:

La soluzione non tiene conto delle commissioni e degli swap. I punti sembrano essere in profitto, ma i costi sono in perdita.

Non mi piace la formula OrderProfit()+ OrderComission()+OrderSwap() con commissioni e scambi

L'aiuto dice che la commissione può essere in punti o in valuta di deposito, questa formula non ne tiene conto, e può fare più male che bene nei test, ma questa è una questione di gusto

Ghabo:

Take_Profit =100 punti, lotto =0.1, quanto sarà il profitto di una posizione aperta nella valuta, quando la posizione è chiusa da TP?

Non funziona così.

La matematica non è il tuo forte? ;)

altrimenti:

profit=NormalizeDouble((Take_Profit *Point)*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Point,2);

se accorciato, sarà

profit=NormalizeDouble(lot *TakeProfit*MarketInfo(_Symbol,MODE_TICKVALUE),2);

 
Vitaly Muzichenko:

Ciò che si intende qui è cheOrderProfit() dovrebbe essere usato nel calcolo

Come calcolare il lotto di una posizione prima di inviare un ordine per ottenere un profitto di 20 USD quando il TakeProfit si attiva? La funzione OrderProfit() non aiuterà in questo caso - non c'è ancora una posizione.

O in altre parole: Quale sarebbe il takeprofit della posizione futura, in modo che se apro con 0,1 lotto otterrei un profitto di 20 USD? E qui OrderProfit() non aiuterà - per la stessa ragione.

E in un altro modo: quale Stop Loss dovrebbe essere nella posizione futura, in modo che quando apro con 0,1 lotto ottengo una perdita non superiore al 3% dei fondi disponibili? E qui OrderProfit() non aiuterà - per la stessa ragione.

Aggiornamento: tutti i calcoli saranno approssimativi senza conoscere la commissione e lo swap. Dovremo aggiustare gli stop-order "sul posto" se abbiamo bisogno di una precisione al centesimo o al punto.

 
Artyom Trishkin:

Prima di inviare un ordine per aprire una posizione, come faccio a calcolare il lotto per la posizione futura, in modo che quando scatta il takeprofit, ottengo un profitto di 20 USD? OrderProfit() non è utile qui - non c'è ancora una posizione.

O altrimenti: Quale sarebbe il TakeProfit della posizione futura per ottenere un profitto di 20 USD quando si apre con 0.1 lotto? E qui OrderProfit() non aiuterà - per la stessa ragione.

Ho appena scritto e capito cosa dovevo calcolare prima di aprire e ho immediatamente cancellato il messaggio. Come sei intelligente a rispondere)

Una volta ho scritto una cosa del genere, e ho inserito un importo per 1 lotto nei parametri di input come commissione.

 
Ciao, non riesco a capire, per favore aiuta. Cosa c'è di sbagliato in questo codice? Mostro il valore medio nel commento e aumenta ad ogni tick? Aiuto:-))))
 for(shift = 0; shift <= Bars-1; shift++)
  {
      zz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, shift);
           if(zz > 0.0)
           {
           HZZ[ww]=zz;
           ww++;          
           }
  }
   
  
       for(ww=0;ww<=nn;ww++){
      if(HZZ[ww]>HZZ[ww+1]){SredRazmax += HZZ[ww];}     
      if(HZZ[ww]<HZZ[ww+1]){SredRazmin += HZZ[ww+1];}
      
       
  Comment("Средний размах = ", (SredRazmax-SredRazmin)/nn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); 
 
Dmitry Belov:
aumenta ad ogni spunta? Aiuto:-))))

significa che state contando su ogni tick il codice che avete presentato e non inizializzando le variabiliSredRazmax eSredRazmin

è una buona abitudine inizializzare le variabili prima dell'uso - è quello che ti insegnano le università, riduce il tempo necessario per trovare i bug ;)

 

Colleghi, perché questo codice si rifiuta di essere eseguito nel tester di strategia, ma viene eseguito correttamente in tempo reale. Sto parlando specificamente della funzione OnChartEvent(). Nella modalità di visualizzazione nel tester, non viene eseguito quando si clicca sui pulsanti.

input double lot=0.1;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ButtonCreate("ButtonBuy",100,100,200,40,"Buy",15,clrBlue);
   ButtonCreate("ButtonSell",100,200,200,40,"Sell",15,clrRed);
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   long cid=ChartID();
   if(id==CHARTEVENT_OBJECT_CLICK && sparam=="ButtonBuy")
     {
      if(OrderSend(_Symbol,OP_BUY,lot,Ask,200,0,0,NULL,0,0,clrBlue)==-1)
         Print("Error: ",GetLastError());
      ObjectSetInteger(cid,"ButtonBuy",OBJPROP_STATE,false);
     }
   if(id==CHARTEVENT_OBJECT_CLICK && sparam=="ButtonSell")
     {
      if(OrderSend(_Symbol,OP_SELL,lot,Bid,200,0,0,NULL,0,0,clrRed)==-1)
         Print("Error: ",GetLastError());
      ObjectSetInteger(cid,"ButtonSell",OBJPROP_STATE,false);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| ButtonCreate                                                     | 
//+------------------------------------------------------------------+ 
void ButtonCreate(string name,int x,int y,int width,int height,
                  string text,int font_size,color back_clr)
  {
   long cid=ChartID();
   int subWind=0;
   ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER;
   string font="Cambria";
   color text_clr=clrBlack;
   color border_clr=clrBlack;
   bool state=false;
   bool back=false;
   bool selectable=false;
   bool selected=false;
   bool hidden=true;
   long zorder=0;
   if(ObjectFind(cid,name)==-1)
     {
      ObjectCreate(cid,name,OBJ_BUTTON,subWind,0,0);
      ObjectSetInteger(cid,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(cid,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(cid,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(cid,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(cid,name,OBJPROP_CORNER,corner);
      ObjectSetString(cid,name,OBJPROP_TEXT,text);
      ObjectSetString(cid,name,OBJPROP_FONT,font);
      ObjectSetInteger(cid,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(cid,name,OBJPROP_COLOR,text_clr);
      ObjectSetInteger(cid,name,OBJPROP_BGCOLOR,back_clr);
      ObjectSetInteger(cid,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(cid,name,OBJPROP_BACK,back);
      ObjectSetInteger(cid,name,OBJPROP_STATE,state); 
      ObjectSetInteger(cid,name,OBJPROP_SELECTABLE,selectable);
      ObjectSetInteger(cid,name,OBJPROP_SELECTED,selected);
      ObjectSetInteger(cid,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(cid,name,OBJPROP_ZORDER,zorder);
     }
  }
//+------------------------------------------------------------------+
 
Oleg Remizov:

Colleghi, perché questo codice si rifiuta di essere eseguito nel tester di strategia, ma viene eseguito correttamente in tempo reale. Sto parlando specificamente della funzione OnChartEvent(). Nella modalità di visualizzazione nel tester, non viene eseguito quando si clicca sui pulsanti.

Perché OnChartEvent() non funziona nel tester di MT4. Controlla il flag di stato del pulsante nel tester.
 
Artyom Trishkin:
Perché in MT4 OnChartEvent() non funziona nel tester. Controlla il flag di stato del pulsante nel tester.

Grazie! Avevo questo sospetto, ma non ho trovato informazioni nell'aiuto che OnChartEvent() non funziona nel tester.

Motivazione: