[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 797

 

同志の皆さん!ROC AUDUSDとGBPUSDを読み取ってGBPAUDでトレードする奇跡のツールを作る試みその2です!(笑)ちょっと原始的な感じですが、どうしてもやってみたかったんです!!!!最適化せずにテスターで実行すると、フリーズはするものの、読み込みは成功し続けるのですが...。そして、結局は一度も取引 されなかった。まあ明らかに失敗したのですが、どこが、plz、教えてください、知識のある人!!!!!! :)))これはEAコードです。 通常のカスタムROCからデータを取得します。

//+------------------------------------------------------------------+
//|                                                    Robot_Rocky_Rich |
//|                                                          JonsonAlla |
//|                                                    deep_ampik@bk.ru |
//+------------------------------------------------------------------+

extern double TakeProfit = 700;
extern double Sl = 200;
extern double Lots = 0.01;
             
//+------------------------------------------------------------------+
int start()
 {
  int cnt, ticket;
  double x1= iCustom("AUDUSD",PERIOD_H1,"ROC",12,1,0);
  double x2= iCustom("GBPUSD",PERIOD_H1,"ROC",12,1,0); 
  
  
     
  /**total=OrdersTotal();
  if(total<1)//проверка количества ордеров 
   {
   if(AccountFreeMargin()<(1000*Lots))
    {
     Print("Недостаточно средств = ", AccountFreeMargin());
     return(0);  
    }**/
  if (x1<x2)
   {
    ticket=OrderSend("GBPAUD",OP_BUY,Lots,Ask,30,Bid-Sl*Point,Ask+TakeProfit*Point,"-",0,0,Green);
    if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция BUY : ",OrderOpenPrice());
     }
    else Print("Ошибка при открытии BUY позиции : ",GetLastError());          
    return(0);
   }
  if (x1>x2) 
   {
    ticket=OrderSend("GBPAUD",OP_SELL,Lots,Bid,30,Ask+Sl*Point,Bid-TakeProfit*Point,"-",0,0,Red);
    if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция SELL : ",OrderOpenPrice());
     }
    else Print("Ошибка при открытии SELL позиции : ",GetLastError());
    return(0); 
   }
   return(0);
  }
  
 
Vinin:

IndicatorCounted()がEAで機能しない。あくまでも指標を目的としたものです。もう少し問題を広げたほうがいいかもしれませんね。その解決方法はさまざまです。最も簡単な方法は、インジケータを最適化することです(ただし、常に可能とは限りません)。エキスパートアドバイザーに計算を転送することもできますが、これも常に可能とは限りません。実際にインジケーターを見る必要が あります

計算コードをEAに転送したいのですが、インジケーターの計算コードがループで始まってしまいます。どうしたらもっと正しいものに置き換えられるでしょうか7。

int CountedBars=IndicatorCounted();
if(CountedBars< 0) CountedBars= 0;
if(CountedBars> 0) CountedBars--;
cnt = Bars - CountedBars;

for(int i = 0; i < cnt ;i++)
 
obla4ko:

同志の皆さん!ROC AUDUSDとGBPUSDを読み取ってGBPAUDでトレードする奇跡のツールを作る試みその2です!(笑)ちょっと原始的な感じですが、どうしてもやってみたかったんです!!!!最適化せずにテスターで実行すると、フリーズはするものの、読み込みは成功し続けるのですが...。そして、結局は一度も取引されなかった。まあ明らかに失敗したのですが、どこが、plz、教えてください、知識のある人!!!!!! :)))これはいわゆるExpert Advisorのコードで、通常のカスタムROCからデータを取得する。


プリミティブ履歴読み込み 制御で試す

ファイル:
 
Vinin:


履歴読み込みの原始的な制御で試す

多分、x1とx2を比較するだけでは正しくなく、何か、例えば、最後のバーに添付する必要があるのでは? インジケーターの論理では、EAは少なくとも一つのポジションを開くべきで、クローズはしない、なぜならクローズはプログラムに実装されていない :)) 、一方の通貨のROCは常に他の通貨のROCよりも大きい ....

 

インジケーターの呼び出しが うまくいっていないのかもしれません。自分で探すしかないですね。ただ、バッファは最初ではなく、0であるべきだと思われます。

 

そのようなインジケーターはありません

 
T-G:

Expert Advisorに計算コードを転送したいのですが、インジケータの計算コードがループで始まっています。より正しいコードに置き換えるにはどうしたらいいですか7

1.どうして?

しかし、どうしても必要なのであれば

2.なぜ私は何も答えないんだ?コシツェンの記事があります(ここです、上のリンク)。何度繰り返せばいいんだ?もしかして、他にやることがあるのでは?

 
Vinin:

そのようなインジケーターはありません

以下はROCインジケータのコードです。

//+------------------------------------------------------------------+
//|                                                          ROC.mq4 |
//|                                    Copyright © 2006, Robert Hill |
//+------------------------------------------------------------------+

#property  copyright "Copyright © 2006, Robert Hill"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 1
#property  indicator_color1  Red
//---- indicator parameters
extern int RPeriod = 12;
extern bool UsePercent = true;
//---- indicator buffers
double RateOfChange[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle(0, DRAW_LINE);
   SetIndexDrawBegin(0, RPeriod);
   IndicatorDigits(Digits + 1);
//---- indicator buffers mapping
   if(!SetIndexBuffer(0, RateOfChange))
       Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("ROC(" + RPeriod + ")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   double ROC, CurrentClose, PrevClose;
   int counted_bars = IndicatorCounted();
//---- check for possible errors
   if(counted_bars < 0) 
       return(-1);
//---- last counted bar will be recounted
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars - counted_bars - RPeriod;
//---- ROC calculation
   for(int i = 0; i < limit; i++)
     {
       CurrentClose = iClose(NULL, 0, i);
       PrevClose = iClose(NULL, 0, i + RPeriod);
       ROC = CurrentClose - PrevClose;
       //----
       if(UsePercent)
         {
           if(PrevClose != 0)
               RateOfChange[i] = 100 * ROC / PrevClose;
         }
       else
           RateOfChange[i] = ROC;
     }   
//---- done
   return(0);
  }
//+------------------------------------------------------------------+
 

"誰も床掃除しなくていいんですか?洗いに行きます!" (с)

ここでは、インジケータコードからエキスパートコードへの移行を 説明します。

 
obla4ko:

以下はROCインジケータのコードです。


インジケータコードにエラーがあります。