Aiuto per la codifica - pagina 675

 
traderduke:
Useresti 1 2ma per la tendenza generale e un'altra per il rientro dei massimi e dei minimi a breve termine.
Questo significa che ci dovrebbero essere due indicatori di volty channel?
 

Ciao codificatori.

Ho bisogno di un aiuto su questa domanda: come spostare orizzontalmente i segnali delle frecce di un semplice indicatore ma cross?

Ho provato questo ma si sposta solo a sinistra, ho bisogno anche a destra.

Grazie

//+------------------------------------------------------------------+
//|                                                   ma crosses.mq4 |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 4
#property  indicator_color1  Blue
#property  indicator_color2  Red
#property  indicator_color3  LimeGreen
#property  indicator_color4  Magenta

//
//
//
//
//

extern int    FastMa             = 13;
extern int    FastMaShift        = 0;
extern int    FastMAMethod       = MODE_EMA;
extern int    FastMAPrice        = PRICE_CLOSE;
extern int    SlowMa             = 68;
extern int    SlowMaShift        = 0;
extern int    SlowMAMethod       = MODE_SMA;
extern int    SlowMAPrice        = PRICE_CLOSE;
extern bool   ShowMaLines        = true;

extern string note               = "turn on Alert = true; turn off = false";
extern bool   alertsOn           = true;
extern bool   alertsOnCurrent    = true;
extern bool   alertsMessage      = true;
extern bool   alertsSound        = true;
extern bool   alertsEmail        = false;
extern string soundfile          = "alert2.wav";

extern string note7              = "Arrow Type";
extern string note8              = "0=default,1=Thick,2=Thin,3=Hollow";
extern string note9              = "4=Round,5=Fractal,6=Diagonal Thin";
extern string note10             = "7=Diagonal Thick,8=Diagonal Hollow";
extern string note11             = "9=Thumb,10=Finger";
extern int    ArrowType          = 2;
extern int    arrowthickness     = 2;
extern double arrowsDisplacement = 2.0;
extern int    arrowHshift        = 0;

//
//
//
//
//

double CrossUp[];
double CrossDn[];
double fastMA[];
double slowMA[];
double trend[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
{
   IndicatorBuffers(5);   
   
   if (ArrowType == 0) {
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,119);
   SetIndexBuffer(1, CrossDn );  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,119);
   }
   if (ArrowType == 1) {
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 233);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 234);
   }
   else if (ArrowType == 2) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 225);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 226);
   }
   else if (ArrowType == 3) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 241);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 242);
   }
   else if (ArrowType == 4) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 221);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 222);
   }
   else if (ArrowType == 5) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 217);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 218);
   }
   else if (ArrowType == 6) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 228);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 230);
   }
   else if (ArrowType == 7) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 236);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 238);
   }
   else if (ArrowType == 8) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 246);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 248);
   }
   else if (ArrowType == 9) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 67);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 68);
   }
   else if (ArrowType == 10) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 71);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 72);
   }
   SetIndexBuffer(2, fastMA);
   SetIndexBuffer(3, slowMA);
   SetIndexBuffer(4, trend);
   
   if (ShowMaLines)
   {
     SetIndexStyle(2,DRAW_LINE); 
     SetIndexStyle(3,DRAW_LINE); 
   }
   else
   {
     SetIndexStyle(2,DRAW_NONE);
     SetIndexStyle(3,DRAW_NONE);
   }       
   
return(0);
}

//
//
//
//
//

int deinit() {  return(0); }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//

int start() {
   int counted_bars=IndicatorCounted();
   int i,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit = MathMin(Bars-counted_bars,Bars-1);
         
   //
   //
   //
   //
   //
            
   for(i=limit; i>=0; i--)
   {
      fastMA[i]  = iMA(NULL,0,FastMa,FastMaShift,FastMAMethod,FastMAPrice,i);
      slowMA[i]  = iMA(NULL,0,SlowMa,SlowMaShift,SlowMAMethod,SlowMAPrice,i);
      double gap = iATR(NULL,0,20,i); 
      
      trend[i] = trend[i+1];
         if (fastMA[i]>slowMA[i]) trend[i] = 1;
         if (fastMA[i]<slowMA[i]) trend[i] =-1;

         //
         //
         //
         //
         //
      
         CrossUp[i] = EMPTY_VALUE;
         CrossDn[i] = EMPTY_VALUE;
         if (trend[i]!= trend[i+1])
         if (trend[i] == 1)
               CrossUp[i+arrowHshift] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i+arrowHshift] = High[i] + arrowsDisplacement * gap; 
         }
         
         if (alertsOn)
         {
         if (alertsOnCurrent)
              int whichBar = 0;
         else     whichBar = 1;

         //
         //
         //
         //
         //
         
         if (trend[whichBar] != trend[whichBar+1])
         if (trend[whichBar] == 1)
               doAlert("uptrend");
         else  doAlert("downtrend");       
   }
   
   return(0);
}
//+------------------------------------------------------------------+


void doAlert(string doWhat)
{
   static string   previousAlert="nothing";
   static datetime previousTime;
   string message;
   
      if (previousAlert != doWhat || previousTime != Time[0]) {
          previousAlert  = doWhat;
          previousTime   = Time[0];

          //
          //
          //
          //
          //

          message =  StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," ma cross ",doWhat);
             if (alertsMessage) Alert(message);
             if (alertsEmail)   SendMail(StringConcatenate(Symbol()," ma cross "),message);
             if (alertsSound)   PlaySound(soundfile);
      }
}

 
thefxpros:

Ciao codificatori.

Ho bisogno di un aiuto su questa domanda: come spostare orizzontalmente i segnali delle frecce di un semplice indicatore ma cross?

Ho provato questo ma si sposta solo a sinistra, ho bisogno anche a destra.

Grazie

Hai provato a spostare il buffer invece di spostare il singolo valore

Qualcosa come :

   SetIndexShift(0,arrowHshift);
   SetIndexShift(1,arrowHshift);

E poi ripristinare queste linee per non avere alcuno spostamento

//
// instead of 
//


         if (trend[i] == 1)
               CrossUp[i+arrowHshift] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i+arrowHshift] = High[i] + arrowsDisplacement * gap; 

//
// it has to be
//

         if (trend[i] == 1)
               CrossUp[i] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i] = High[i] + arrowsDisplacement * gap; 
 
thefxpros:

Ciao codificatori.

Ho bisogno di un aiuto su questa domanda: come spostare orizzontalmente i segnali delle frecce di un semplice indicatore ma cross?

Ho provato questo ma si sposta solo a sinistra, ho bisogno anche a destra.

Grazie

PS: per spostare i valori ora devi usare i valori + per spostare le frecce a destra e i valori - per spostare i valori a sinistra (allego il codice di test e funziona bene per qualsiasi caso di spostamento delle frecce - a destra o a sinistra)

File:
_test.mq4  8 kb
 
mladen:
Questo significa che ci dovrebbero essere due indicatori volty channel?

mladen

Scusa per non aver risposto prima, speravo di tornare con una soluzione alla domanda sull'indicatore ma non è successo

Sì, è corretto, mi dispiace per il malinteso. Stavo rispondendo a Steven sull'indicatore 2MA. Non sono stato in grado di usare l'indicatore esistente sia per l'entrata che per il rientro come MR Tools ha fatto per l'indicatore PrCh, anche se il mio EA non è mai riuscito ad ottenere il rientro corretto, come lo swing al fumo.

Comunque posso farlo nell'EA con 2 voltys quindi non ho bisogno di creare questo indicatore.


Grazie per l'aiuto

Ray

 
pls can u help me code this indicator to EA I only want it to trade one candle when the arrow appear and close it when the candle close pls u can make it option i need it
 

Salve.

Sto cercando di fare un allarme basato su un indicatore di domanda e offerta shved in accordo con il crossover stocastico. Sono stato informato che questo indicatore può essere utilizzato per creare EA poiché memorizza le informazioni nei buffer, tuttavia non sono super sicuro di leggere e capire mql4 ancora e non ha più di 2-3 mesi di tempo di sperimentazione.

Pertanto spero che qualcuno là fuori possa aiutarmi a scrivere la linea iCustom per controllare se il prezzo è all'interno dello zoene o no.

//+------------------------------------------------------------------+
//|                                              Indicator: chan.mq4 |
//|                                       Created with EABuilder.com |
//|                                             http://eabuilder.com |
//+------------------------------------------------------------------+
#property copyright "Created with EABuilder.com"
#property link      "http://eabuilder.com"
#property version   "1.00"
#property description ""

#include <stdlib.mqh>
#include <stderror.mqh>

//--- indicator settings
#property indicator_chart_window
#property indicator_buffers 2

#property  indicator_type1 DRAW_ARROW
#property  indicator_width1 5
#property  indicator_color1 0xFFAA00
#property  indicator_label1 "Buy"

#property  indicator_type2 DRAW_ARROW
#property  indicator_width2 5
#property  indicator_color2 0x1A00FF
#property  indicator_label2 "Sell"

//--- indicator buffers
double Buffer1[];
double Buffer2[];

double myPoint; //initialized in OnInit

void myAlert(string type, string message)
  {
   if(type == "print")
      Print(message);
   else if(type == "error")
     {
      Print(type+" | chan @ "+Symbol()+","+Period()+" | "+message);
     }
   else if(type == "order")
     {
     }
   else if(type == "modify")
     {
     }
  }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {   
   IndicatorBuffers(2);
   SetIndexBuffer(0, Buffer1);
   SetIndexEmptyValue(0, 0);
   SetIndexArrow(0, 241);
   SetIndexBuffer(1, Buffer2);
   SetIndexEmptyValue(1, 0);
   SetIndexArrow(1, 242);
   //initialize myPoint
   myPoint = Point();
   if(Digits() == 5 || Digits() == 3)
     {
      myPoint *= 10;
     }
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
   int limit = rates_total - prev_calculated;
   //--- counting from 0 to rates_total
   ArraySetAsSeries(Buffer1, true);
   ArraySetAsSeries(Buffer2, true);
   //--- initial zero
   if(prev_calculated < 1)
     {
      ArrayInitialize(Buffer1, 0);
      ArrayInitialize(Buffer2, 0);
     }
   else
      limit++;
   
   //--- main loop
   for(int i = limit-1; i >= 0; i--)
     {
      if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation   
      //Indicator Buffer 1
      if(iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i) < 20
      && iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i+1) > 20 //Stochastic Oscillator crosses below fixed value
          !!!!!  && iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", i ***************** check if price is in upper zone
      )
        {
         Buffer1[i] = Low[i]; //Set indicator value at Candlestick Low
        }
      else
        {
         Buffer1[i] = 0;
        }
      //Indicator Buffer 2
      if(iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i) > 80
      && iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i+1) < 80 //Stochastic Oscillator crosses above fixed value
           !!!! && iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", i ***************  check if price is in lower zone
      )
        {
         Buffer2[i] = High[i]; //Set indicator value at Candlestick High
        }
      else
        {
         Buffer2[i] = 0;
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

Non mi aspetto che qualcuno investa del tempo per darmi una mano, ma se non scrivo non ho nessuna possibilità, quindi ho pensato di fare un tentativo.

Pace e amore compagni commercianti

 
NWFstudent:

Salve.

Sto cercando di fare un allarme basato su un indicatore di domanda e offerta shved in accordo con il crossover stocastico. Sono stato informato che questo indicatore può essere utilizzato per creare EA poiché memorizza le informazioni nei buffer, tuttavia non sono super sicuro di leggere e capire mql4 ancora e non ha più di 2-3 mesi di tempo di sperimentazione.

Pertanto spero che qualcuno là fuori possa aiutarmi a scrivere la linea iCustom per controllare se il prezzo è all'interno dello zoene o no.

Non mi aspetto che qualcuno investa del tempo per darmi una mano, ma se non scrivo non ho nessuna possibilità, quindi ho pensato di fare un tentativo.

Pace e amore compagni commercianti

Fai qualcosa del genere(controlla anche i commenti)

   //
   //
   // checking if the price is withing the lower zone
   //
   //
   
   if (Close[i] <= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 6,i) &&
       Close[i] >= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 7,i))
   //
   //
   // checking if the price is withing the upper zone
   //
   //
   
   if (Close[i] <= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 4,i) &&
       Close[i] >= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 5,i))
       
   //
   //
   // PS: that indicator stores values only for current bar in the buffers, so it works only for i==0
   //
   //
   //       
 
mladen:

Fai qualcosa del genere (controlla anche i commenti)

Grazie, devi essere l'amministratore più gentile di qualsiasi pagina. Il tuo lavoro è così apprezzato.

Abbiate cura di voi.

 
dotmund:
pls può u aiutarmi a codificare questo indicatore per EA voglio solo che scambi una candela quando la freccia appare e chiuderla quando la candela si chiude pls u può fare l'opzione ne ho bisogno

pls aiutami

Motivazione: