[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 413

 

OKです。

そう、新しいバー です。

 
Neo777:

OKです。

ええ、新しいバーです。

https://www.mql5.com/ru/articles/1494 ここでは、新しいバーが 始まったことを判断する方法について説明します。どのように始まったか-コンディションを確認する
 

Good afternoon.People、誰かWindowScreenShot関数について助けてください。3日目にして誰も答えてくれません((以下のスクリプトを書きました(添付ファイル参照)。

脚本について2字で。このスクリプトは、クライアント端末のウィンドウに表示されているチャートのスクリーンショットを作成するためのものです。 外部変数extern datetime Time_bar には、ゼロバーが作成されるまでのバーの時間(チャートの右インデントを考慮)が指定されています。ライン内

int bar_number=iBarShift(NULL,0,Time_bar,true)

外部変数extern datetime time_bar で指定したバーのシリアル番号が検索されます。この関数自体は、行の

bool f=WindowScreenShot(name+".gif",1024,768,bar_number,Scale,View_graph)

さて、ここで問題です...。簡単のために、最後の2本のバーのスクリーンショットを作成する必要があると仮定します。次に、もし行

int bar_number=iBarShift(NULL,0,Time_bar,true)

を変更しない場合、結果は以下のスクリーンショットになります。


つまり、スクリーンショットにはバーがないのです(ただし、文字列の

int bar_number=iBarShift(NULL,0,bar_time,true)

時間ごとの小節数を計算する必要があります。)

この行を次のように表示すると

int bar_number=iBarShift(NULL,0,Time_bar,true)+2

をクリックすると、私たちが欲しかったスクリーンショットが得られます。

質問:この文字列が次のような形式である場合、なぜですか?

int bar_number=iBarShift(NULL,0,Time_bar,true)

スクリーンショットは、上の行で指定したバーより2本分右にずれて撮影されているのですね。

P.S. フォーラムを散らかさないために、回答をよろしくお願いします。

ファイル:
 
ilunga:
コードを表示 + インジケータにどのような入力パラメータがあるか

20回も確認しないと書けませんね、パラメータは全てインジケータの通り正しいです。問題は別のところにあるのかもしれません。もしかしたら、そんな問題に遭遇したことがあるのでしょうか?
 

同僚たちよ!!こんばんは。

素晴らしいQQEインジケータを発見したので、このインジケータをベースにしたExpert Advisorを探そうと思ったのですが・・・見つかりませんでした。しかし、このフォーラムで、ユーザーであるPOZITIVさんのメッセージを発見したのです。

彼は、「赤い線が黄色い線を上向きに横切ったら買いの注文を1 つ、赤い線が黄色い線を上向きに横切ったら売りの注文を1つ 出すべき」という論理を書きました。

その結果、Expert Advisorのコードは中途半端なものになってしまったという。

私は別のロジックを計算しました:太い曲線が上から下に点線を交差するとき - 1は、大胆な赤いものが下から上に点線を交差するとき、そのロットを売って閉じる(購入)する必要があります。そして、同じ瞬間にすぐに別のロット(買い)を開くために、逆の状況が発生したときに(売り)を閉じる必要があります....-ので、常に1ロットを開き、線の各クロスは、1を閉じると同時に別のロットを開くために使用されています。そして、交差点は、おそらく1つのバーを閉じた後の値で考慮されるべきであり、すなわち、20分(閉じた後)、太字は51(条件付き)の値を持ち、点線の50、21分(閉じた後)、太字50と点線の51は、あなたが販売しなければならないと思います。SL、TCはありません。

原理的には簡単なことです。矢印も、アラームも、メッセージもない。純粋な形での自動モードでの取引のみ。

このコード(下記)をこのロジックに改良するのを手伝ってください。そして、期間(1分~1日)とSFパラメータ(平滑化)を調整することが可能でしょう。

2日目にしてコードを理解し修正しようとしましたが、私はプログラマーではありません(((((( ;゚Д゚))))))


ぜひともご協力をお願いします

//--- input parameters
extern double MaxRisk=1.0;
extern double FixLot = 0.01;
extern double Exponent=2.0;
extern int Magic=888;

// костыли

extern int TakeProfit=100;
extern int StopLoss=100;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
//----
   int Count=0;
   double b0,b1;
   int ticket;

// параметры индикатора
   int SF=5; // original 5
   int RSI_Period=14; // original 14
   double DARFACTOR=4.236; //original 4.236

//------------ Параметры из индикатора QQEA -----------------------
// Buffer0 -- красная жирная
   string Buffer0=iCustom(NULL,0,"QQEA",SF,RSI_Period,DARFACTOR,0,0);
// Buffer1 -- жёлтый пунктир
   string Buffer1=iCustom(NULL,0,"QQEA",SF,RSI_Period,DARFACTOR,1,0);

   b0=StrToDouble(Buffer0);
   b1=StrToDouble(Buffer1);


   double Lot=GetLot(MaxRisk);
// если лот <0 выводим сообщение об ошибке
   if(Lot==0)
     {
      Alert("Недостаточно средств!");
      return(0);
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(Lot!=0 && b0>b1) // если лот <> 0 и красная выше жёлтой
     {
      ticket=NewOrder(OP_BUY,Lot);
      if(ExistOrders(Symbol(),1,888,0)==true) // проверяем наличие ордера sell
        {
         CloseOrder();
        }
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(Lot!=0 && b0<b1) // если лот <> 0 и красная выше жёлтой
     {
      ticket=NewOrder(OP_SELL,Lot);
      if(ExistOrders(Symbol(),0,888,0)==true) // проверяем наличие ордера buy
        {
         CloseOrder();
        }
     }

   Comment("Red line: ",b0,"Yellow line: ",b1);
   return(0);
  }
//-------------------------------------------------------------
//расчёт лота

double GetLot(int Risk)
  {
   double Free=AccountFreeMargin();
   double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
   double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
   double Step=MarketInfo(Symbol(),MODE_LOTSTEP);
   double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step;
   if(Lot<Min_Lot) Lot=Min_Lot;
   if(Lot>Max_Lot) Lot=Max_Lot;
   if(Lot*One_Lot>Free) return(0.0);
   return(Lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ExistOrders(string sy="",int op=-1,int Magic=-1,datetime ot=0)
  {
   int i,k=OrdersTotal(),ty;

   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++)
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         ty=OrderType();
         if(ty>1 && ty<6)
           {
            if((OrderSymbol()==sy || sy=="") && (op<0 || ty==op))
              {
               if(Magic<0 || OrderMagicNumber()==Magic)
                 {
                  if(ot<=OrderOpenTime()) return(True);
                 }
              }
           }
        }
     }
   return(False);
  }
//открытие нового ордера
int NewOrder(int Cmd,double Lot)
  {
   double TP=0; //тейкпрофит
   double SL=0; //стоплосс
   double PR=0; //Цена
   while(!IsTradeAllowed()) Sleep(100);
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(Cmd==OP_BUY)
     {
      PR=Ask;
      if(TakeProfit>0) TP=Ask+TakeProfit*Point;
      if(StopLoss>0) SL=Ask-StopLoss*Point;
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(Cmd==OP_SELL)
     {
      PR=Bid;
      if(TakeProfit>0) TP=Bid-TakeProfit*Point;
      if(StopLoss>0) SL=Bid+StopLoss*Point;
     }
   if(GetOrdersCount(Magic,Cmd)>0)return(0);
   int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP," ",0,0,Green);
   if(tic<0) Print("Ошибка открытия ордера: ",GetLastError());
   return(tic);
  }
// закрытие ордера
void CloseOrder()
  {
   double PR=0;
   while(!IsTradeAllowed()) Sleep(100);
   if(OrderType()==OP_BUY) PR=Bid;
   if(OrderType()==OP_SELL) PR=Ask;
   if(!OrderClose(OrderTicket(),OrderLots(),PR,3,Red))
      Print("Ошибка закрытия ордера: ",GetLastError());
   return;
  }
//+------------------------------------------------------------------+
// подсчет кол-ва открытых позиций
int GetOrdersCount(int MagicNumber,int Type)
  {
   int count=0;

   for(int i=0; i<OrdersTotal(); i++)
     {
      // already closed
      if(OrderSelect(i,SELECT_BY_POS)==false) continue;
      // not current symbol
      if(OrderSymbol()!=Symbol()) continue;
      // order was opened in another way
      if(OrderMagicNumber()!=MagicNumber) continue;

      if(OrderType()==Type)
        {
         count++;
        }
     }

   return(count);
  }
//-------------------------------------------------------
 
sss2019:

さて、私自身はすべて20回チェックしました。20回チェックしないと書けませんが、すべてのパラメータはインジケータと同じように正しいです。問題はおそらく別のところにあるのだろうが、もしかしたら誰かがそのような問題に遭遇したことがあるのだろうか?
iCustomに入力されたパラメータが間違っていて、ありえないのですが。検索してください。
一晩かけて自分で解決しました。インジケータからEAに externを転送する際、パラメータの順番を間違えてしまいました。パラメータの並びが同じで、気が狂いそうになりました :))
 
granit77:
iCustomのパラメータ入力がおかしいだけで、そんなはずはない。調べてみてください。
私自身、先日、一晩かけて格闘しました。インジケータからExpert Advisorに外部パラメータを転送する際に、パラメータの順番を間違えてしまいました。パラメータの並びが同じで、気が狂いそうになりました :))

iCustom(Symbol(),0,"RMRCS_entry-point"," ",5,6,7,62,-62,57,-57,54,-54,0.7,1.1,1.07," ",1,9,6,1,34,6,0,4,89,1,3,3.0,2.0,0.5,3.0," ",6,6,70,30,0.0,6,3.0," ",1,21,1,45,89,1,35,89,1,9," ",4,2,5,1," ",49,-49,0,0,0,0,0,0,0,0," ",0,34,200,150,1,100," ",1,3,1,1,2," ",1.4,3.7,0,1);


そして、以下がそのパラメータです。

extern string REI_str = "";
extern int REI1_Per=5; 
extern int REI2_Per=6;     
extern int REI3_Per=7;     
extern int REI1_up=62;    
extern int REI1_dn=-62;    
extern int REI2_up=57;     
extern int REI2_dn=-57;            
extern int REI3_up=54;     
extern int REI3_dn=-54;            
extern double REI1_ct=0.7;  
extern double REI2_ct=1.1;  
extern double REI3_ct=1.07;
extern string MACD_str = "";
extern int MACD_FastMA_Meth=1;   
extern int MACD_FastMA_Per=9;    
extern int MACD_FastMA_Price=6; 
extern int MACD_SlowMA_Meth=1;   
extern int MACD_SlowMA_Per=34; 
extern int MACD_SlowMA_Price=6; 
extern int MACD_SL_Meth=0;      
extern int MACD_SL_Per=4;       
extern int MACD_Diap_Per=89;    
extern int MACD_Slope_Meth=1;   
extern int MACD_Slope_Per=3;  
extern double MACD_ct_1 = 3.0; 
extern double MACD_ct_2 = 2.0;  
extern double MACD_ct_3 = 0.5;  
extern double MACD_ct_4 = 3.0;  
extern string RSI_str = "";
extern int RSI_Per = 6;     
extern int RSI_Price = 6;  
extern int RSI_up = 70;      
extern int RSI_dn = 30;     
extern double RSI_ct1 = 0.0; 
extern int RSI_ct2 = 6;      
extern double RSI_ct3 = 3.0;
extern string CHO_str = "";
extern int  CHO_FastMA_Meth=1;      
extern int  CHO_FastMA_Per=21;      
extern int  CHO_SlowMA_Meth=1;      
extern int  CHO_SlowMA_Per=45;      
extern int  CHO_DiapVal_Per=89;     
extern int  CHO_MADiapVal_Meth=1;   
extern int  CHO_MADiapVal_Per=35;    
extern int  CHO_SlopeDiapVal_Per=89;  
extern int  CHO_MASlope_Meth=1;      
extern int  CHO_MASlope_Per=9;       
extern string Stoch_str = "";
extern int Stoch_KPer=4;       
extern int Stoch_DPer=2;        
extern int Stoch_Slow=5;        
extern int Stoch_SL_MA_Meth=1; 
extern string EntryLevel_str = "";
extern int REI_SvS_up = 49;  
extern int REI_SvS_dn = -49; 
extern int MACD_SvS_up = 0; 
extern int MACD_SvS_dn = 0;  
extern int RSI_SvS_up = 0;  
extern int RSI_SvS_dn = 0; 
extern int CHO_SvS_up = 0;  
extern int CHO_SvS_dn = 0;  
extern int STO_SvS_up = 0; 
extern int STO_SvS_dn = 0;  
extern string EntryOther_str = "";
extern int MALgthBar_Meth=0;
extern int MALgthBar_Per=34;
extern int MAXLgthBar = 200;
extern int TtS_MinABS = 150; 
extern int Shift_Points = 1; 
extern int Start_Calc = 100;   
extern string EntryCondition = "";
extern bool Ban_InvEntry = true;    
extern int InvEntry_Bars = 3;        
extern bool Ban_TtS_Decline=true;   
extern bool Ban_Entry_Series = true; 
extern int MAX_Entry_Series=2;      
extern string Gen_str = ""; 
extern double DiapBar_CtSl = 1.4;
extern double TakeProf_CtSl = 3.7;
 
sss2019:
iCustomで接続した場合、非標準のインジケータのパラメータ数に制限があるかどうか教えてください。

私は 約8つのパラメータを持つインジケータがあります。 パラメータを正しく入力し、何度も確認しましたが、コンパイル時にエラー')'が発生します。- wrong parameters count D:\InstaTrader⇄Experts⇄2.mq4 (11, 280)

"約80 "と言ったところでしょうか
 

使用頻度の低いパラメータからexternを削除すれば、混乱することはないでしょう。

私の質問に注目してください。

ローソク足の下にオブジェクトが表示されるのはなぜか、その理由は?

チェックボックスを価格にする方法、オブジェクトのプロパティについて教えて ください。

 
PapaYozh:

"約80 "と言ったところでしょうか。

まさに80点というところでしょうか。そして、sss2019は、パラメータがすべて正しい。しかし、このパラメーターの多いワイルドなインジケーターは何なんだろう?