どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1003

 
 

以下のような実装方法をアドバイスしてください。

チャート上にカスタムラインがあり、その数を "n "本とする。価格がある線に近づいたときに、価格値を取得するにはどうしたらよいですか?

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

 

ターゲットが(価格が(100pips)「ライン」の上にあれば「買い」)である。))また、この質問では、現時点での移動平均の 価格を知るにはどうすればよいのでしょうか?

よろしくお願いします )

 
Tema97:

ターゲットが(価格が(100pips)「ライン」の上にあれば「買い」)である。))また、この質問では、現時点での移動平均の価格を知るにはどうすればよいのでしょうか?

よろしくお願いします )

Temaさん、ドキュメントを読んでください、iMaはグラフィカルなオブジェクトと同様にそこに記述されています。行の価格を取得するための関数ObjectGetDouble(対応するパラメータを持つ)があります。
 

一度閉じた注文を再開させないためにはどうしたらよいか、開設時の取引条件を維持したまま再開させる方法を初心者に伝授してください。

例:ストキャスティクスが50レベルを上方にクロスしたら、買いを建てる。ストキャスティクスの反転、またはレベル80に達したとき、またはテイクプロフィットでクローズします。しかし、オープンするための取引条件は守られているのですストキャスティクスが50を超えたら買い。

double S_1=iStochastic(NULL,0,K,D,slowing,MODE_SMA,price_field,MODE_MAIN,0);

double S_2=iStochastic(NULL,0,K,D,slowing,MODE_SMA,price_field,MODE_MAIN,1);

if(S_1>50)

{

Opn_B=trueとする。

}

if(S_1<S_2||S_1>80)

{

Cls_B=trueとする。

}

MQLチュートリアルで紹介されているシンプルなExpert Advisorのスキームに取引基準を挿入しています。この問題を回避するためには、どのような機能を使用すればよいのかご教示ください。ありがとうございました。

 
if(S_1 > 50 && S_2 < 50)

これが50レベルを下から上へ越える条件です。

 
AlexeyVik:

これが50レベルを下から上へ越える条件です。

ありがとうございました。これから試してみます。
 
アタッチされているインジケーター(またはEA)を、チャートを閉じることなく、チャートから「デタッチ」するにはどうすればよいですか?
 
リアルタイムで動作するAccountEquity()インジケータをチャート上に配置することは可能でしょうか?どこで手に入るの?
 

こんにちは、アドバイスをお願いします。MQL4チュートリアルで紹介されているExpert Advisorの取引条件を変更しているのですが、どうすればいいですか?買いでストップロスを設定しようとすると、プログラムがエラー130:間違ったストップを表示します。その理由を教えてください。

// M15の数値

extern double StopLoss =0; // 開いた注文のSL値

extern double TakeProfit =0; // 開いた注文のTP

extern int K = 5;

extern int D = 3;

extern int slowing = 3;

extern int price_field = 0;


extern int Level_1 = 80; // ストキャスティックレベル

extern int Level_2 = 20;

extern inttern Period_MA_2 = 31; // MA期間2

extern double Rastvor =28.0; // MA間の距離

extern double Lots =0.01; // 固定ロット数。

extern double Prots =0.07; // フリーファンドのパーセンテージ

bool Work=true; // Expert Advisorが動作する。

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

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

int start()

{

イント

K_levelです。

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

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

チケット; // 注文番号

double S_1,

S_2,

MA_1_t, // MA_1_t の値。MA_1現在値

MA_2_t, // 値。MA_2 現在の MA_2_t 値 // 順番に選択されたロット数

ロット, //現在選択されている順番でのロット数

Lts, //オープンオーダーのロット数

Min_Lot, // 最小ロット数

ステップ、 // ロットサイズ変更のステップ

フリー、 // 現在のフリー資金

One_Lot, // 1ロットの値

価格, // 選択された注文の価格

SL, // 選択された注文のSL価格

TP; // 選択された注文のTP

ブール

Ans =false, // クロージングの後のサーバーの回答

Cls_B=false, // 買いを終了するための基準

Cls_S=false, // 売りの終了基準

Opn_B=false, // 開くの基準 Buy

Opn__S=false; // 売りの開始の判断基準

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

//前処理

if(Bars < Period_MA_2) // 十分なバーがない。

{

Alert("Not enough bars in the window. Expert Advisor is not working.");

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

}

if(Work==false) // 重大なエラーが発生しました。

{

Alert("Critical error. Expert Advisor is not working.");

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

}

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

// オーダーカウント

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

Total=0; // 注文数

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

{

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

{ // オーダー解析。

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

if (OrderType()>1) // 保留注文があります。

{

Alert("未決済注文を検出しました。 Expert Advisorは動作していません。")

return; // Exit()

}

Total++; // 成行注文カウンター

if (Total>1) // 注文が1件以上ない場合

{

Alert("複数の成行注文があり、Expert Advisorが動作していません。")

return; // Exit()

}

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

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

Price =OrderOpenPrice(); // 選択された注文の価格です。

SL =OrderStopLoss(); // 選択された注文のSL。

TP =OrderTakeProfit(); // 選択された注文のTP。

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

}

}

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

// 取引条件

S_1=iStochastic(NULL,0,K,D,slowing,MODE_SMA,price_field,MODE_MAIN,0);


S_2=iStochastic(NULL,0,K,D,slowing,MODE_SMA,price_field,MODE_MAIN,1);


if(S_1 > 50 && S_2 < 50)


{


Opn_B=trueとする。


}


if(S_1<S_2||(S_1 < 80 && S_2 > 80))


{


Cls_B=trueとする。


}

if(S_1 < 50 && S_2 > 50)


{


Opn_S=trueとする。


}


if(S_1>S_2||(S_1 > 20 && S_2 < 20))


{


Cls_S=trueとする。


}

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

// 注文を閉じる

while(true) // オーダーループを閉じる。

{

if (Tip==0 && Cls_B==true) //買い注文を開く。

{ //終了基準あり

アラート("買物を終了しようとしています",チケット,";)

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

Ans=OrderClose(Ticket,Lot,Bid,2);//買いを閉じる

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

{

アラート(「買い注文終了」,チケット;)

break; // クローズループから抜ける

}

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

continue; // 再試行

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

}

if (Tip==1 && Cls_S==true) // 売り注文を開始しました。

{ // 近い基準がある

アラート("売りの終了を試みています",チケット,";)

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

Ans=OrderClose(Ticket,Lot,Ask,2);//売りのクローズ

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

{

アラート(「売り注文が終了しました」,チケット;)

break; // クローズループから抜ける

}

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

continue; // 再試行

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

}

break; // 終了する間

}

//--------------------------------------------------------------- 7 --

// 注文の値

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

Min_Lot=MarketInfo(Symb,MODE_MINLOT); // 最小ロット数

Free =AccountFreeMargin(); // 資金開放

One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// 1ロットの値です。

Step =MarketInfo(Symb,MODE_LOTSTEP); // ステップ変更サイズ

if (Lots > 0) // ロットが指定されている場合

Lts =Lots; // 私たちは彼らと一緒に仕事をする

else // フリーファンドの割合

Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// 開くには

if(Lts < Min_Lot) Lts=Min_Lot; // Min_Lotより小さくないこと; // Min_Lotより小さくないこと

if(Lts*One_Lot > Free) // Freeより高いロットがある。

{

Alert(" Not enough money ", Lts," lots);

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

}

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

//受注開始

while(true) //順番にループを閉じる。

{

if (Total==0 && Opn_B==true) // 未決済注文はありません。

{ //オープンバイヤーの基準です。

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

Alert("Trying to open Buy. Waiting for reply...");

チケット=OrderSend(Symb,OP_BUY,Lts,Ask,2,StopLoss,TakeProfit);//買いを開始

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

{

アラート(「買い注文が開きました」,チケット;)

return; //オーダーを終了する

}

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

continue; // 再試行

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

}

if (Total==0 && Opn_S==true) // 未決済注文はありません。

{ //売り基準を開く。

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

Alert("Attempting to open Sell. Waiting for reply...");

チケット=OrderSend(Symb,OP_SELL,Lts,Bid,2,StopLoss,TakeProfit);/Open Sel.

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

{

アラート("売り注文が開きました",チケット;)

return; //オーダーを終了する

}

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

continue; // 再試行

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

}

break; // 終了する間

}

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

return; //start()から抜ける

}


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

int Fun_Error(int Error) // エラー処理 fie

{

switch(エラー)

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

case 4: Alert("The 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 --

int New_Stop(int Parametr) // ストップ・ピックをチェックします。

{

int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// 最小距離

if (Parametr < Min_Dist) // 許容値より小さい場合。

{

Parametr=Min_Dist; // 公差を設定する。

Alert("停止距離が伸びました。")

}

return(Parametr); // 返り値。

}

理由: