MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 402

 
STARIJ:
以下、これです。

グラフィカルオブジェクトのマウスクリックイベント

チャートイベント_オブジェクト_クリック

X座標

Y座標

イベントが発生したグラフィカルオブジェクトの名前


ううう、全部わかったような気がする)
ありがとうございました。

 

結果「r」をバッファにリンクしてグラフに表示する方法がわかりませんので、アドバイスをお願いします。

教科書の例題が理解できない、人に聞いたことがある

rの値をバッファに書き込むと、グラフに表示される」「通常はforループでバッファに書き込む」と書かれています。"

が、それじゃ何もわからない!?

ある結果は、「r」の文字だけで、どこにもないんです。


そしてもうひとつ

例えば、"r "という結果をどのように滑らかにするか。

ご清聴ありがとうございました。
 

エラーは何ですか?テスターで実行すると、保留中の注文が削除 されるときとされないときがある。なぜ?動作原理は、TPで買い注文が決済されると、BuyLimitが解除される、というものです。アドバイスをお願いします

////+------------------DELETE BUYLIM-----------------------------------+
   if((SchBuyLimLots(Symbol())-SchBuyLots(Symbol()))!=0)                  //  лот байлимит НЕ лот бая
     {     
      for(int i=0;i<OrdersTotal();i++)
        {
         datetime T_op=0,T_lim=0,buys=0;
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) break;
         if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue;
         if(OrderType()==OP_BUY)
         if(OrderCloseTime()>buys) buys+=OrderCloseTime();
         buys= OrderCloseTime();
         T_op=buys;                                                       //  время закрытия бая
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue;
           {
            if(OrderType()==OP_BUYLIMIT)
              {
               T_lim=OrderOpenTime();                                     //  время закрытия селл
               ticket=OrderTicket();
               if(T_lim<=T_op)                                            //  разность
               res=OrderDelete( ticket,clrMagenta);
               if(res<1)
               {
                  Print(GetLastError());
               }
              }
           }
        }
     }
 
ZZuretc:

エラーは何ですか?テスターで実行すると、保留中の注文が削除 されるときとされないときがある。なぜ?動作原理は、TPで買い注文が決済されると、BuyLimitが解除される、というものです。アドバイスお願いします。


オーダートータル() != オーダーヒストリートータル()

 
Alexey Viktorov: 私自身はミラクルを見たことがありません。

ありがとうございます。

 
現在のATRの最大 値、最小値の求め 方を教えてください。
ファイル:
q6a0hh.PNG  12 kb
 

皆さん、こんにちは。

ストキャスティックをベースにした簡単なExpert Advisorを作ったのですが(上のピークで売り、下のピークで買い)、コンパイラがその場でエラーになります。

どなたか、このエラーの原因や意味を教えていただけませんか?最初、どこかに括弧を付け忘れたのかと思った。

でも、いや、何度か確認しましたが、すべて問題ないようです。よろしくお願いします。

以下は、コンパイラが生成するエラーです: ')'- すべての制御パスが値を返すわけではない Stohastic-Signals-33.mq4 177 3

')'- すべての制御パスが値を返すわけではない Stohastic-Signals-33.mq4 210 3

Expert Advisor 本体と mq4 ファイルを添付します。

このファイルにExpert Advisorを添付する方法を教えてください(エディタに色文字で表示されます)

//+------------------------------------------------------------------+

//| Stohastic-Signals-33.mq4

//| Copyright 2017, MetaQuotes Software Corp.

//| https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#プロパティリンク "https://www.mql5.com"

#property version "1.00"

#プロパティの厳密さ

//+------------------------------------------------------------------+

bool New_Bar=false; // 新しいバーのフラグです。

extern double H_line=80; // ストキャスティクスの上値(買われ過ぎ)ライン

extern double L_line=20; // ストキャスティクスの下限(売られすぎ)ライン

extern inttern Slippage=2; // スリッページ

extern int SL; // 設定されるオーダーのSL

extern int TP; // 設定されるオーダーの TP

extern double Lts; //設定されるオーダーのロットサイズ

bool B_Flag=false; // BUY用シグナルフラグ

S_Flag=false, // 売りのシグナルを出すためのフラグ

ORD_Buy=false, // 買いポジションのフラグを立てる

ORD_Sell=false; // フラグを立てて売りのポジションを開く

bool Work=true; // エキスパートの作業を許可するフラグ。

string Symb; // 金融商品の名称

int Crit_Error=11111111; // クリティカルエラーの発生数

//+------------------------------------------------------------------+

//| エキスパートティック機能

//+------------------------------------------------------------------+

void OnTick()

{

イント

Total, // ウィンドウ内の注文数

Tip=-1, // 注文種別選択 (B=0,S=1)

チケット; // 注文番号

二重

M_1, M_2, M_3, // 1, 2, 3小節のMAIN値

Lot; // 選択された注文のロット数

bool Ans_Close; // 注文のクローズが成功したかどうかのフラグ(1クローズ、0クローズでない)。

bool Ans_Open; // 注文が正常にオープンされたかどうかのフラグ (1-closed、0-not opened)

//--------------------------------------------------------------- 1 --

// 重大なエラーがないか確認する

if(Work==false) // クリティカルエラー

{

Alert("重大なエラーです。 Expert Advisorが動作していません。")

return; // start() を終了する。

}

//--------------------------------------------------------------- 2 --

// 新しいバー

Fun_New_Bar(); // 関数の呼び出し

if (New_Bar==false) // バーが新しいものでない場合

return; // ...そして終了

//------------------------------------------------------------- 3 --

// オーダーカウント

Symb=Symbol(); // 金融商品の名前。

Total=0; // 注文数

for(int i=1; i<=OrdersTotal(); i++) // オーダーループ

{

if(OrderSelect(i-1,SELECT_BY_POS)==true) // 以下の場合。

{ // オーダー解析。

if (OrderSymbol()!=Symb)continue; // 当社の金融商品ではありません。

Ticket=OrderTicket(); // 注文番号が選択されました。

Tip =OrderType(); // 選択されたオーダーのタイプ。

Lot=OrderLots(); // ロット数

}

さもなくば

{

Alert("OrderSelect() returned an error - ",GetLastError()); // 注文を選択できなかった場合、.

return; // 終了

}

}

//------------------------------------------------------------- 4 --

// 取引基準 状況分析

M_1=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,1);// 1バー

M_2=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,2);// 2本バー

M_3=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,3);// 3本バーの場合

//------------------------------------------------------------- 5 --

if(M_2>=H_line) // ストハスティックが買われすぎのラインを超えたら

{

if(M_3 <= M_2 && M_2 > M_1) // ストハスティックが買われ過ぎラインを越えた{...

{

if(S_Flag==true) // If(売りポジションがオープンしたら、...)

return; // start() を終了する。

// 売りポジションがオープンされていない場合、 ...

S_Flag=true; // 売りのシグナルが出たことを示すフラグを設定する。

B_Flag=false; // 買いシグナルが出ていないことを確認する。

if(ORD_Buy==true) // 買いの注文が出されている場合。

{

if(Tip!=0) // チェック:注文のTYPEがオープンオーダーと一致しない...

{

Work=false; //The Expert Advisorは動作しません。

Alert("The order TYPE does not corresponding the open order FLAG. Exit start."); // 一致しない場合、Expert Advisorは動作を停止します。

return; // スタートから終了する

}

Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // 開いた買い注文を閉じる。

if(Ans_Close==false) // クローズに失敗した場合...

{

Alert("注文の決済に失敗しました。Expert Advisorの動作が停止しました。)

return; // 終了

}

}

Ans_Open=Open_Order(Symb,Lts,SL,TP,1); // OPEN POINTS

if(Ans_Open==false) // 売りのオープンに失敗した場合

{

Alert("Failed to open order.Expert Advisorの動作が停止しました。)

return; // スタートから終了する

} // Sellが正常に開かれた場合

ORD_Sell=true; // ショートポジションがオープンされたことを示すフラグを立てる。

ORD_Buy=false; // LONGポジションが無くなったとフラグを立てる。

}

return; // 終了スタート

}

//------------------------------------------------------------------------ 6 --

if(M_2<=L_line) // ストハスティックが売られすぎのラインを越えた場合

{

if(M_3 >= M_2 && M_2 < M_1) // ボトムピーク出現(買い呼出し)

{

if(B_Flag==true) // 買いポジションが開かれた場合

return; // start() を終了する。

// 買いのポジションが開設されていない場合

B_Flag=true; // 買いポジションがオープンした場合、フラグをオンにします。

S_Flag=false; // 売りシグナルがないことを確認する。

if(ORD_Sell==true) // 未決済の売り注文がある場合、...

{

if(Tip!=1) // チェック:注文のTYPEがオープンオーダーと一致しない...

{

Work=false; //The Expert Advisorは動作しません。

Alert("The order TYPE does not corresponding the open order's FLAG. Exit start."); // 一致しない場合、Expert Advisorは動作を停止します。

return; // スタートから終了する

}

Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // 開いた売り注文を閉じる

if(Ans_Close==false) // クローズに失敗した場合

{

Alert("注文の決済に失敗しました。Expert Advisorの動作が停止しました。)

return; // 終了

}

}

Ans_Open=Open_Order(Symb,Lts,SL,TP,0); // OPEN LONG POSITION

if(Ans_Open==false) // オープンに失敗した場合 Buy

{

Alert("Failed to open order.Expert Advisorの動作が停止しました。)

return; // スタートから終了する

} // 買い注文が正常に開始された場合

ORD_Sell=false; // ショートポジションがないことを確認する。

ORD_Buy=true; // LONGポジションをフラグオープンする。

}

return; // 終了スタート

}

}

//+------------------------------------------------------------------ 7 --

void Fun_New_Bar() // 検出フィー.

{ // ... new bar.

static datetime New_Time=0; // 現在のバーの時間

New_Bar=false; // 新しいバーを表示しない。

if(New_Time!=Time[0]) // 時刻を比較する。

{

New_Time=Time[0]; // 今の時刻は

New_Bar=true; // 新しいバーが捕まる

}

}

//--------------------------------------------------------------- 8 --

bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // オーダー終了のフィー

{

double Close_Price=0; // 注文の終値

while(真)

{

RefreshRates(); // データを更新する

if(F_Tip==0) // 注文が「買い」の場合、・・・。

Close_Price=Bid; // 終値 Bid

Close_Price=Ask; // 売り注文の場合、終値はAskになります。

bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // 買いと売りのクローズを行う。

if (Ans_Close==true) // うまくいきました :)

return(true); // close 関数を終了します。

Crit_Error=GetLastError(); // エラー番号を修正する。

if (Fun_Error(Crit_Error)==1) // エラー処理

continue; // Retry; // 再試行する。

return(false); // 関数を終了します。

}

}

//--------------------------------------------------------------- 9 --

//受注開始

bool Open_Order(string F_Symb、double F_Lts、int F_SL、int F_TP、int F_Tip)

{

double Open_Price; //オープンプライス

string Tip_Deal; //取引の方向(買いか売りか)。

double f_sl; // ストップロス注文

double f_tp; // テイクプロフィット

int Ticket; // 新規注文のチケット

while(true) // オーダークローズループ。

{

RefreshRates(); // データを更新する

if(F_Tip==1) // 売りを開く...

{

Open_Price=Bid。

Tip_Deal="OP_SELL"。

f_sl=NormalizeDouble(Bid+F_SL*Point,Digits)となります。

f_tp=NormalizeDouble(Bid-F_TP*Point,Digits)となります。

}

//BUYを開く場合は...

Open_Price=Ask;

Tip_Deal="OP_BUY"。

f_sl=NormalizeDouble(Bid+F_SL*Point,Digits)となります。

f_tp=NormalizeDouble(Bid-F_TP*Point,Digits)となります。

Ticket=OrderSend(F_Symb,Tip_Deal,F_Lts,Open_Price,2,f_sl,f_tp);//open ORDER

if (Ticket > 0) // うまくいった :)

return(true); //関数を終了します。

Crit_Error=GetLastError(); // コミットエラー番号

if (Fun_Error(Crit_Error)==1) // エラー処理

continue; // Retry; // 再試行する。

return(false); // 関数を終了します。

}

}

//--------------------------------------------------------------- 10 --

int Fun_Error(int Error) /関数のエラー処理

{

switch(エラー)

{// 乗り越えられないエラー。

case 4: Alert("Trade server is busy. Try again...");

Sleep(3000); // 簡単な解決方法です。

return(1); // 関数を終了します。

case 135:Alert("Price changed. Try again...");

RefreshRates(); // データをリフレッシュします。

return(1); // 関数を終了します。

case 136:Alert("No price. Waiting for new tick...");

while(RefreshRates()==false) // 新しいティックを表示する。

Sleep(1); // ループ内の遅延時間

return(1); // 関数を終了します。

case 137:Alert("Broker is busy. Try again...");

Sleep(3000); // 簡単な解決方法です。

return(1); // 関数を終了します。

case 146:Alert("The trading subsystem is busy. Try again...");

Sleep(500); // 単純な判定

return(1); // 関数を終了します。

// クリティカルエラー

case 2: Alert("一般的なエラー;")

return(0); // 関数を終了します.

case 5: Alert("Older version of the terminal.");

Work=false; // もう動作しない

return(0); // 関数を終了します。

case 64: Alert("アカウントがブロックされました。");

Work=false; // もう動作しない

return(0); // 関数を終了します。

case 133:Alert("取引禁止。");

return(0); // 関数を終了します。

case 134:Alert("Not enough money to execute the transaction")と表示されます。

return(0); // 関数を終了します。

default: Alert("An error has occurred ",Error); // その他のオプション

return(0); // 関数を終了します。

}

}

//-------------------------------------------------------------- 11 --



ファイル:
 
RomanRott: 現在のATPの最大 値、最小値の求め 方を教えてください。
   double max=-10000, min=+10000, ATR;
   for(int n=0; n<WindowFirstVisibleBar();n++)
   {
      ATR=iATR(NULL, 0, 14, n);
      if(max<ATR)max=ATR;
      if(min>ATR)min=ATR;
   }
   Alert("min = ", DoubleToStr(min,4), "    max = ", DoubleToString(max,4));
その他の指標についても同様に
 
Skander: こんにちは。Stochstic(上のピークが売り、下のピークが買い)に基づいた簡単なエキスパートを作りましたが、コンパイラはフラットスポットでエラーを出します。
どなたか、このエラーの原因や意味を教えていただけませんか?最初、どこかに括弧を付け忘れたのかと思った。
でも、いや、何度か確認しましたが、すべて問題ないようです。よろしくお願いします。
以下は、コンパイラが生成するエラーです: ')'- すべての制御パスが値を返すわけではない Stohastic-Signals-33.mq4 177 3
')'- すべての制御パスが値を返すわけではない Stohastic-Signals-33.mq4 210 3
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // オーダー終了のフィー
{
double Close_Price=0; // 注文の終値
while(真)
{
RefreshRates()。// データを更新する
if(F_Tip==0)// If(買い注文, ...
Close_Price=Bid; // 終値 Bid
Close_Price=Ask。// 売り注文の場合、終値はAsk
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // 買いと売りのクローズを行う。
if (Ans_Close==true)// うまくいった :)
return(true)です。// クローズ機能から抜ける
Crit_Error=GetLastError()です。// コミットエラー番号
if (Fun_Error(Crit_Error)==1) // エラー処理
を続ける。// 再試行
return(false)です。// 関数を終了する
}
}

MetaEditorのCompileボタンを押し、エラーメッセージを 読みます - 行番号と位置の番号があります

//--------------------------------------------------------------- 8 --
  bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip)    // Ф-ия закрытия ордера
  {
   double Close_Price=0;                       // Цена закрытия ордера 
   while(true)
     {
        ....................................
            continue;                           // Повторная попытка
         return(false);                                // Выход из функции
     }
     return false;   // Компилятор хочет return в конце функции
  }

SRCボタンでプログラムコードを 挿入 - ローカルの読者はこの方法が好きです!!そしてあなたの長い放浪はBRRRRです。

コード ボタンは、メッセージテキストにソースコードを挿入するためのものです。クリックすると、空のウィンドウが表示されますので、そこにコードを貼り付けて、「挿入」ボタンをクリックしてください。

 
STARIJ:

MetaEditorのCompileボタンを押し、エラーメッセージを 読みます - 行番号と位置の番号があります

SRCボタンでプログラムコードを 挿入 - ローカルリーダーはその方が好きです!!そしてあなたの長い放浪はBRRRRRです。

メッセージテキストにソースコードを挿入するためのボタンです。クリックすると、空のウィンドウが表示されますので、そこにコードを貼り付けて、挿入 ボタンをクリックしてください。


ありがとうございます。