学习逻辑

 

这真的很简单。有一种帮助他人做最好的代码的愿望,并向他人学习。

一个人最终会形成相当多的刻板印象,这已经不是什么秘密了,这些刻板印象有时(大多数情况下)会起到帮助作用,有时会起到阻碍作用。

我将准备一个指标的变体,并试图解释所做的事情和原因。当然,如果你有兴趣的话。

 

大,interesno!

瓦莱拉

 

请以EA为例,没有人对指标感兴趣。

 

好吧,那我就是个无名小卒。

)))前几天告诉过你,我是一个论坛故障,一个幻影,一个fata morgana......

 
Svinozavr:

嗯,这使我成为一个无名小卒。

)))前几天告诉过你--我是一个论坛故障,一个小说,一个fata morgana...。

但总是在正确的时间出现在正确的地点。这很好!

 

维克多,是什么激励你做这个壮举?在这个论坛上,这不仅仅是逻辑问题,我们90%的人都没有接触过我们的头脑。

你不害怕在这个沼泽地中陷入困境吗?你要面对的不仅仅是那10%有能力的人...

===

我也加入了祝贺的行列...我甚至要为你干杯,为你无望的冒险的成功干杯......

"独自去医治盲人。
要知道,在怀疑的时候。
"门徒们的幸灾乐祸的嘲弄
还有人群的冷漠"。
// 阿赫玛托娃

 
Vinin:

这真的很简单。有一种帮助他人做最好的代码的愿望,并向他人学习。

一个人最终会形成相当多的刻板印象,这已经不是什么秘密了,这些刻板印象有时(大多数情况下)会起到帮助作用,有时会起到阻碍作用。

我将准备一个指标的变体,并试图解释所做的事情和原因。当然,如果你有兴趣的话。

//+-------------------------------------------------------------------------+
//| 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);} 
//+------------------------------------------------------------------+     
维克多!如果我理解正确,你准备帮助....,我不明白我哪里 "没有逻辑"
 
age_nt:
维克多!如果我理解正确,你准备帮助....,我不明白我哪里 "没有逻辑"
附加的文件:
logika.zip  254 kb
 

谢谢迪米特里的关注......当然,我尊重你的知识....,还有幽默感。

无法欣赏它--没有安装MSoffffffis

 
age_nt:

谢谢迪米特里的关注......当然,我尊重你的知识....,还有幽默感。

无法欣赏它--没有安装MSoffffffis。

你知道,我们没有什么问题。特别是对你的文本格式。你显然有拉链。

附加的文件:
logika2.zip  90 kb
 
也是为了那些没有办公室或拉链的特别有办法的人。
附加的文件:
logika3.mq4  277 kb