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

 
sergeev:

となると、関数OrderLots.


この関数が理解できないので、例を挙げて助けてください :)

注文はOrderSelect() 関数で事前に選択されている必要があります」とありますが、同じ方向のすべての未決済注文を選択するにはどうすればよいのでしょうか?

 
Elektronik:


この関数が理解できないので、例を挙げて教えてください:)

注文はOrderSelect() で事前に選択されている必要があります」とありますが、同じ方向のすべての未決済注文を選択するにはどうすればよいのでしょうか?

ありえません。OrderSelect() で1つずつ調べていくループのみ。

 

このEAに挿入する必要のあるストップロス・スクリプトがあるかどうか教えてください。

double x = ... // Задаем на сколько пипсов выше
double sl = NormalizeDouble(High[1] + x * Point, Digits); // Задаем значение стоплосс на x пипсов выше предпоследней свечи
ファイル:
 

四捨五入せずに小数点 以下の桁数を減らすにはどうしたらよいですか?

(DoubleToStr(NormalizeDouble(0.109,2),2)); = 0.11と0.10

 
Elektronik:

四捨五入せずに小数点以下の桁数を減らすにはどうしたらよいですか?

(DoubleToStr(NormalizeDouble(0.109,2),2)); = 0.11と0.10

例えば、文字列関数を使って点の位置を求め、その1文字先で文字列を切り捨てるなど、方法はいくらでもあるのだ。しかし、もし既製のビルトインソリューションがあるのなら、なぜ私たちはどこからともなく問題を発明しなければならないのでしょうか?2つを1つに変えるだけでOKです。
 
Reshetov:
文字列関数を使って点の位置を求め、その1文字先で文字列を切り捨てるなど、方法はいくらでもある。しかし、すぐに使える既製のソリューションがあるのなら、なぜ問題を作り上げるのか?


既成の解決策を提案してください:)

 
Elektronik:


既成概念にとらわれず教えてください:)

(DoubleToStr(NormalizeDouble(0.109,1)))です。
 

丸め込まない場合は、これだけ:

Reshetov с помощью строковых функций найти местоположение точки и обрезать строку на один символ далее нее

 

何が問題なのか、ご教授ください。

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

//| AAAA.mq4

//| |

//| |

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

#property copyright""

#プロパティリンク ""


extern string TimeStart = "00:00"; //制御期間の開始時刻

extern string TimeEnd = "00:00"; //制御周期終了のタイマーを指定する。


extern double LOT = 0.01; // ロット

extern int Magic = 777; // マジック



double marga,Lot,SL,TP; // 入力されたマージン、ロット、ストップロス、テイクプロフィット変数

int Total,Orders,tipOrders,TradeDey; // 変数タイプ,注文タイプ,取引日。


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

//| エキスパートアドバイザーの機能

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

int start() // 初期化スタート関数

{

datetime Time_Start = StrToTime(StringConcatenate(Day(),".",Month(),".",Year()," ",TimeStart, ":00")); // 開始パラメータ //.

datetime Time_End = StrToTime(StringConcatenate(Day(),".",Month(),".",Year()," ",TimeEnd, ":00")); // 終了パラメータ ///...



Total=0; // 注文がない場合

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

{

if (OrderSelect(i-1,SELECT_BY_POS)==false) // 成行注文がない場合。

{

if //If

{

int BarStart = iBarShift(NULL,PERIOD_M1,Time_Start,false); // m1のチェック期間の最初のバーを検索する

int BarEnd = iBarShift(NULL,PERIOD_M1,Time_End,false); //基準期間のm1における検索バーエンド

double Max_Price=iHigh(NULL,0,iHighest(NULL,PERIOD_M1,MODE_HIGH,BarStart-BarEnd,BarEnd)); //期間内の最高価格値

double Min_Price=iLow (NULL,0,iLowest (NULL,PERIOD_M1,MODE_LOW,BarStart-BarEnd,BarEnd)); //期間内の最安値値

}

if (TimeCurrent()>Time_End && ObjectFind("bar0"+Time_End)==-1) // グラフィックの表示設定

{

ObjectCreate("bar0"+Time_End, OBJ_RECTANGLE, 0, 0,0, 0,0)を実行。

ObjectSet("bar0"+Time_End, OBJPROP_STYLE, STYLE_SOLID)を使用します。

ObjectSet ("bar0"+Time_End, OBJPROP_COLOR, Blue);

ObjectSet ("bar0"+Time_End, OBJPROP_BACK, true)を使用します。

ObjectSet ("bar0"+Time_End, OBJPROP_TIME1,Time_Start);

ObjectSet ("bar0"+Time_End, OBJPROP_PRICE1,Max_Price);

ObjectSet ("bar0"+Time_End, OBJPROP_TIME2,Time_End);

ObjectSet ("bar0"+Time_End, OBJPROP_PRICE2,Min_Price);

}

if (Bid<Max_Price) OrderSend(Symbol(),OP_BUYSTOP,LOT,Ask,3,Min_Price, //BUY注文を発注するための条件

NormalizeDouble(Ask + Max_Price - Min_Price,Digits), "UPDD",Magic,Blue);

if (Bid>Max_Price)

Comment("保留中の注文はBidで発注できません");

if (Bid>Min_Price) OrderSend(Symbol(),OP_SELLSTOP,LOT,Bid,3,Min_Price, //売り保留注文を出すための条件

NormalizeDouble(Ask + Max_Price-Min_Price,Digits), "UPDD",Magic,Blue);

if (Bid<Max_Price)

Comment("売り注文はできません");

}

を返します。

}

コンパイルできません。そうでなければ、レンジから上下に2つのペンディングオーダーを置くはずです。

 
Legeo777:

何が問題なのか、ご教授ください。

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

//| AAAA.mq4

//| |

//| |

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

#property copyright ""

#プロパティリンク ""


extern string TimeStart = "00:00"; //制御期間の開始時刻

extern string TimeEnd = "00:00"; //制御周期終了のタイマーを指定する。


extern double LOT = 0.01; // ロット

extern int Magic = 777; // マジック



double marga,Lot,SL,TP; // 入力されたマージン、ロット、ストップロス、テイクプロフィット変数

int Total,Orders,tipOrders,TradeDey; // 変数タイプ,注文タイプ,取引日。


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

//| エキスパートアドバイザーの機能

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

int start() // 初期化スタート関数

{

datetime Time_Start = StrToTime(StringConcatenate(Day(),".",Month(),".",Year()," ",TimeStart, ":00")); // 開始パラメータ //.

datetime Time_End = StrToTime(StringConcatenate(Day(),".",Month(),".",Year(),",TimeEnd, ":00")); // 終了パラメータ ///...



Total=0; // 注文がない場合

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

{

if (OrderSelect(i-1,SELECT_BY_POS)==false) // 成行注文がない場合

{

if //If: -削除
{

int BarStart = iBarShift(NULL,PERIOD_M1,Time_Start,false); // m1のチェック期間の最初のバーを検索する

int BarEnd = iBarShift(NULL,PERIOD_M1,Time_End,false); //チェックピリオドm1の検索バーエンド

double Max_Price=iHigh(NULL,0,iHighest(NULL,PERIOD_M1,MODE_HIGH,BarStart-BarEnd,BarEnd)); //期間内の最高値の値

double Min_Price=iLow (NULL,0,iLowest (NULL,PERIOD_M1,MODE_LOW,BarStart-BarEnd,BarEnd)); //期間内の最安値値

}

if (TimeCurrent()>Time_End && ObjectFind("bar0"+Time_End)==-1) // グラフィックの表示設定

{

ObjectCreate("bar0"+Time_End, OBJ_RECTANGLE, 0, 0,0, 0,0)を実行。

ObjectSet("bar0"+Time_End, OBJPROP_STYLE, STYLE_SOLID)を使用します。

ObjectSet ("bar0"+Time_End, OBJPROP_COLOR, Blue);

ObjectSet ("bar0"+Time_End, OBJPROP_BACK, true)を使用します。

ObjectSet ("bar0"+Time_End, OBJPROP_TIME1,Time_Start);

ObjectSet ("bar0"+Time_End, OBJPROP_PRICE1,Max_Price);

ObjectSet ("bar0"+Time_End, OBJPROP_TIME2,Time_End);

ObjectSet ("bar0"+Time_End, OBJPROP_PRICE2,Min_Price);

}

if (Bid<Max_Price) OrderSend(Symbol(),OP_BUYSTOP,LOT,Ask,3,Min_Price, //BUY注文を出す条件 -AskやBidで保留注文は出せない)

NormalizeDouble(Ask + Max_Price - Min_Price,Digits), "UPDD",Magic,Blue);

if (Bid>Max_Price)

Comment("保留中の注文はBidで発注できません");

if (Bid>Min_Price) OrderSend(Symbol(),OP_SELLSTOP,LOT,Bid,3,Min_Price, //売り注文を出す条件 -同上)

NormalizeDouble(Ask + Max_Price-Min_Price,Digits), "UPDD",Magic,Blue);

if (Bid<Max_Price) -ここでエラーに なるはずです。

Comment("売り注文はできません");

}

} - 追加

を返します。

}

コンパイルできません。 実際はレンジから上下に2つ保留の注文を入れるはずです。

修正後、コンパイルはできますが、おそらく動作しないでしょう - 間違った時間設定、非正規化された価格、ストップとオープン価格の 近接のチェックがないことです。