Lógica de aprendizagem

 

É realmente muito simples. Há um desejo de ajudar os outros a fazer o melhor código, e aprender com os outros.

Não é segredo que eventualmente se desenvolve certos estereótipos que às vezes (na maioria das vezes) ajudam e às vezes dificultam.

Vou preparar uma variante do indicador e tentar explicar o que foi feito e por quê. Se você estiver interessado, é claro.

 

Da, interesno!

Valera

 

no exemplo de uma EA, por favor, ninguém está interessado em indicadores.

 

Bem, então eu sou um zé-ninguém.

))) Eu lhe disse outro dia, sou uma falha do fórum, um fantasma, uma fata morgana...

 
Svinozavr:

Bem, isso faz de mim um zé-ninguém.

))) Eu te disse outro dia - sou uma falha do fórum, uma ficção, uma fata morgana...

Mas sempre no lugar certo, na hora certa. Isso é bom!

 

Victor, o que o inspirou a fazer essa proeza? Neste fórum, não se trata apenas de lógica, 90 por cento deles não são inteligentes.

Você não tem medo de ficar atolado neste pântano? Você terá que lidar com mais do que apenas os 10% que são competentes.

===

Eu me associo aos parabéns... Bebo até a você, e ao sucesso de seu empreendimento sem esperança.

"Vá sozinho e cure os cegos",
Para saber, na hora da dúvida.
"A zombaria dos discípulos
E a indiferença da multidão".
// Akhmatova

 
Vinin:

É realmente muito simples. Há um desejo de ajudar os outros a fazer o melhor código, e aprender com os outros.

Não é segredo que eventualmente se desenvolve certos estereótipos que às vezes (na maioria das vezes) ajudam e às vezes dificultam.

Vou preparar uma variante do indicador e tentar explicar o que foi feito e por quê. Se você estiver interessado, é claro.

//+-------------------------------------------------------------------------+
//| ver.RA                                                         all1.mq4 |
//|                                               Copyright © 2010, age_nt  |
//+-------------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Green
#property indicator_color2 Blue
#property indicator_color3 Red
#property indicator_color4 LightGray
#property indicator_color5 DarkOrange

#property indicator_level1 40
#property indicator_level2 20
#property indicator_level3 0
#property indicator_level4 -20
#property indicator_level5 -40

extern int       MA     =     10;
extern bool      all = FALSE; 
//---- Буферы индикатора
double EUR_Buffer[];
double USD_Buffer[];
double GBP_Buffer[];
double CHF_Buffer[];
double JPY_Buffer[];
//---- Переменные
int BarsMin=1000;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators

   IndicatorBuffers(5);

   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

//---- indicator line
   SetIndexBuffer(0,EUR_Buffer);
   SetIndexBuffer(1,USD_Buffer);
   SetIndexBuffer(2,GBP_Buffer);
   SetIndexBuffer(3,CHF_Buffer);
   SetIndexBuffer(4,JPY_Buffer);
   
   bool showEUR, showUSD, showGBP, showCHF, showJPY, showRAVI;
   if ( StringFind(Symbol(), "EUR", 0) != -1) showEUR = TRUE;
   if ( StringFind(Symbol(), "USD", 0) != -1) showUSD = TRUE;
   if ( StringFind(Symbol(), "GBP", 0) != -1) showGBP = TRUE;
   if ( StringFind(Symbol(), "CHF", 0) != -1) showCHF = TRUE;
   if ( StringFind(Symbol(), "JPY", 0) != -1) showJPY = TRUE;

   if ( all== TRUE || showEUR == TRUE ) SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,DodgerBlue);
   else SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,0,CLR_NONE);
   if ( all == TRUE || showUSD == TRUE ) SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1,ForestGreen);
   else SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,0,CLR_NONE);
   if ( all == TRUE || showGBP == TRUE ) SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1,FireBrick);
   else SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,0,CLR_NONE);
   if ( all == TRUE || showCHF == TRUE ) SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,1,LightBlue);
   else SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,0,CLR_NONE);
   if ( all == TRUE || showJPY == TRUE ) SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,1,Orange);
   else SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,0,CLR_NONE);


   SetIndexLabel(0,"EUR");
   SetIndexLabel(1,"USD");
   SetIndexLabel(2,"GBP");
   SetIndexLabel(3,"CHF");
   SetIndexLabel(4,"JPY");

   
   SetIndexDrawBegin(0,0);
   SetIndexDrawBegin(1,0);
   SetIndexDrawBegin(2,0);
   SetIndexDrawBegin(3,0);
   SetIndexDrawBegin(4,0);

   
   IndicatorShortName("all1");

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
     int limit,i;
//     string S=Symbol();
     int counted_bars=IndicatorCounted();
     
  //---- проверка на возможные ошибки
     if(counted_bars<0) return(-1);

  //---- вычисление минимального кол-ва баров (длины отображаемого графика)
     if(counted_bars==0)
       {
       BarsMin=iBars("GBPUSD",NULL);
       if(BarsMin>iBars("USDCHF",NULL)) BarsMin=iBars("USDCHF",NULL);
       if(BarsMin>iBars("EURUSD",NULL)) BarsMin=iBars("EURUSD",NULL);
       if(BarsMin>iBars("USDJPY",NULL)) BarsMin=iBars("USDJPY",NULL);
       if(BarsMin>iBars("EURGBP",NULL)) BarsMin=iBars("EURGBP",NULL);
       if(BarsMin>iBars("EURCHF",NULL)) BarsMin=iBars("EURCHF",NULL);
       if(BarsMin>iBars("EURJPY",NULL)) BarsMin=iBars("EURJPY",NULL);
       if(BarsMin>iBars("GBPCHF",NULL)) BarsMin=iBars("GBPCHF",NULL);
       if(BarsMin>iBars("GBPJPY",NULL)) BarsMin=iBars("GBPJPY",NULL);
       if(BarsMin>iBars("CHFJPY",NULL)) BarsMin=iBars("CHFJPY",NULL);
       }

 //   
 Message(Vl(Symbol(),0,0));  
     
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars--;
     limit=Bars-counted_bars;
     if(limit>BarsMin-2) limit=BarsMin-2;
     
  //---- основной цикл

   //   for (i = 0; i<=limit;i++)
   //    {

   //    USD_Buffer[i]=USD(i);
   //    EUR_Buffer[i]=EUR(i); 
   //    GBP_Buffer[i]=GBP(i); 
   //    CHF_Buffer[i]=CHF(i); 
   //    JPY_Buffer[i]=JPY(i); 
  //     }
 
 
     //---- Вычисление индексов
     for (i = 0; i<=limit;i++)
      {
       USD_Buffer[i]=USD(i);
       EUR_Buffer[i]=EUR(i); 
       GBP_Buffer[i]=GBP(i); 
       CHF_Buffer[i]=CHF(i); 
       JPY_Buffer[i]=JPY(i); 
      }
     
//----
   return(0);
  }

//+------------------------------------------------------------------+
double USD(int j)
  {
  double val = 0;
  double GBP_USD=-Cl("GBPUSD",j);
  double USD_CHF=Cl("USDCHF",j);
  double EUR_USD=-Cl("EURUSD",j);
  double USD_JPY=Cl("USDJPY",j);
  val=(GBP_USD+USD_CHF+EUR_USD+USD_JPY)/4;
  return(val);
  }
//+------------------------------------------------------------------+
double GBP(int j)
  {
  double val = 0;
  double GBP_USD=Cl("GBPUSD",j);
  double EUR_GBP=-Cl("EURGBP",j);
  double GBP_CHF=Cl("GBPCHF",j);
  double GBP_JPY=Cl("GBPJPY",j);
  val=(EUR_GBP+GBP_USD+GBP_CHF+GBP_JPY)/4;
  return(val);
  }
//+------------------------------------------------------------------+
double EUR(int j)
  {
  double val = 0;
  double EUR_USD=Cl("EURUSD",j);
  double EUR_GBP=Cl("EURGBP",j);
  double EUR_CHF=Cl("EURCHF",j);
  double EUR_JPY=Cl("EURJPY",j);
  val=(EUR_USD+EUR_GBP+EUR_CHF+EUR_JPY)/4;  
  return(val);
  }
//+------------------------------------------------------------------+
double CHF(int j)
  {
  double val = 0;
  double USD_CHF=-Cl("USDCHF",j);
  double EUR_CHF=-Cl("EURCHF",j);
  double GBP_CHF=-Cl("GBPCHF",j);
  double CHF_JPY=Cl("CHFJPY",j);
  val=(USD_CHF+EUR_CHF+GBP_CHF+CHF_JPY)/4;
  return(val);
  }
//+------------------------------------------------------------------+
double JPY(int j)
  {
  double val = 0;
  double USD_JPY=-Cl("USDJPY",j);
  double EUR_JPY=-Cl("EURJPY",j);
  double GBP_JPY=-Cl("GBPJPY",j);
  double CHF_JPY=-Cl("CHFJPY",j);
  val=(USD_JPY+EUR_JPY+GBP_JPY+CHF_JPY)/4;
  return(val);
  }
//+------------------------------------------------------------------+
double Cl(string symb,int shift) 
  {
   double SMA1,SMA2,result,a,b; double k = 100*Vl(symb,0,shift); 
   double point = MarketInfo(symb,MODE_POINT); 
   double digits = MarketInfo(symb,MODE_DIGITS); 
   SMA1=iMA(symb,0,(101-k),0,MODE_LWMA,PRICE_TYPICAL,shift); 
   SMA2=iMA(symb,0,k,0,MODE_LWMA,PRICE_TYPICAL,shift); 
   result=((SMA1-SMA2)/(SMA2+0.000000001))*100;   
   a=50*(MathExp(2*result)-1)/(MathExp(2*result)+1);
   double norm = (a/point/100);    
   double target=NormalizeDouble(a,digits);  
   return(target);
  }   
double Vl(string symb,int tf,int Shi)  
{
 double v; //double k = Vol(symb,0,Bar); 
 if(iVolume(symb,0,Shi+1)<iVolume(symb,0,Shi+2)) v= iVolume(symb,0,Shi+1)/(0.0000001 +iVolume(symb,0,Shi+2));
 else v= iVolume(symb,0,Shi+2)/(0.0000001 +iVolume(symb,0,Shi+1));
 double fff=NormalizeDouble(v,2);
 return(fff); 
 }  
//+------------------------------------------------------------------+
//| Comment                                                          |
//+------------------------------------------------------------------+ 
//
void Message(string m) {  Comment(m);  if (StringLen(m)>0) Print(m);} 
//+------------------------------------------------------------------+     
Victor! Se eu entendi corretamente, você está pronto para ajudar.... Eu não consigo entender onde eu não tenho "nenhuma lógica".
 
age_nt:
Victor! Se eu entendi corretamente, você está pronto para ajudar.... Eu não consigo entender onde eu não tenho "nenhuma lógica".
Arquivos anexados:
logika.zip  254 kb
 

Obrigado Dimitri por sua atenção...Eu respeito seu conhecimento.... e seu humor, é claro.

Não foi possível apreciar - nenhum MSoffffis instalado

 
age_nt:

Obrigado Dimitri por sua atenção...Eu respeito seu conhecimento.... e seu humor, é claro.

Não foi possível apreciá-lo - nenhum MSoffffis instalado.

Sabe, não temos nenhum problema. Especialmente para VOCÊ em formato de texto. Você obviamente tem o zíper.

Arquivos anexados:
logika2.zip  90 kb
 
Também para os particularmente engenhosos, que não têm um escritório ou um zíper.
Arquivos anexados:
logika3.mq4  277 kb