MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 23 1...161718192021222324252627282930...1953 新しいコメント Artyom Trishkin 2016.11.30 09:46 #221 giannis1386:完全に混乱しています。double blevel=OrderStopLoss()<Bid-Point*TS; works for me.SLは利益だけを考えて価格を追求する。double slevel=OrderStopLoss()>Ask+Point*TS; これをelseに追加 する方法がわからない。boolではありません。boolではなく、暗黙の変換と呼ばれるものですところで、あなたは何をしているのですか?トロール? giannis1386 2016.11.30 09:52 #222 Artyom Trishkin:boolではありませんが、暗黙の変換ということでところで、あなたは何をしているのですか?トロール? 元のスクリプトは、注文が利益に達したときに閉じるだけでした。 Artyom Trishkin 2016.11.30 10:58 #223 giannis1386: はい、トロールを作ろうとしました。元のスクリプトは、注文の利益に達したときに閉じるだけでした。 スクリプトではなく、EA。プログラムの種類を混同しているのでは?スクリプトはチャート上にロードされた後一度だけ実行され、その後削除されます。ループしていない場合。誰かがポジションを 閉じるためのループスクリプトを作ることはまずないでしょう。 Artyom Trishkin 2016.11.30 11:00 #224 giannis1386: そうです、トロールを作ろうとしたのです。元のスクリップは、ある注文で利益に達したときに閉じるだけでしたロジックです。ループ内で選択された現在の注文の利益が設定値より大きい場合、そのストップロスが計算されたストップロス・トロール・レベルより小さい(買いの場合)/大きい(売りの場合)場合、ストップを新しい値にシフトさせる。これは一言で言えば Alexey Viktorov 2016.11.30 11:12 #225 Artyom Trishkin: それは私が提案したことではありませんか?ええ、まあ...あまりに不用意にコードを見たので、全く見なかったと言った方が良いくらいです。でも、それが半分くらいで、あとは恥ずかしくなるくらいくだらないことを言ってしまっている。なぜか突然、ArrayMaximum() が構造体の配列、あるいはこの配列の別のフィールドに適用されるかもしれないという、おかしな考えが浮かんだのです。私は後悔しています、私は他の人にそう思うことを助言しません、それはうまくいきません...:) Artyom Trishkin 2016.11.30 11:16 #226 Alexey Viktorov:ええ、まあ...あまりに不用意にコードを見たので、全く見なかったと言った方が良いくらいです。でも、それが半分くらいで、あとは恥ずかしくなるくらいくだらないことを言ってしまっている。なぜか突然、ArrayMaximum()を構造体の配列、あるいはこの配列の別のフィールドに適用することができる、というおかしなアイデアが浮かんだのです。私は後悔しています、私は他の人にそう思うことを助言しません、それはうまくいきません...:)まあ...そして私はというと、同じようにあなたのコードに目を通して、あなたに感謝しました。要するに-どちらも冗談の価値がある...。 giannis1386 2016.11.30 11:18 #227 Artyom Trishkin: スクリプトではなく、Expert Advisorです。プログラムの種類を混同しているのでは?スクリプトはチャート上にロードされた後一度だけ実行され、その後削除されます。ループしていない場合。ポジションを 閉じるためのループスクリプトを作る人はほとんどいないでしょう。とのことです。以下は、MT4標準のclose.mq4スクリプトを少し修正したものです。MetaTraderのThomasScriptsフォルダにファイルを置いて ください。 Alexey Viktorov 2016.11.30 11:24 #228 Artyom Trishkin:まあ...私はというと、あなたのコードをちらっと見ただけで、本当に短くて助かったと頭を下げてしまいました...。要するに-どちらも冗談の価値がある...。いや、納得できない。このコード double openCandle[], closeCandle[]; CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle); CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle); double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]); double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);動作確認済みです。単純なユーザー定義のダブル配列があり、CopyRates()は構造体の配列を埋めるので、配列を扱う関数を使用して最大と最小を選択することはできません。 Artyom Trishkin 2016.11.30 11:28 #229 giannis1386:とのことです。以下は、MT4標準のclose.mq4スクリプトを少し修正したものです。このファイルをMetaTraderのArchitectureScriptsフォルダ に置きます。つまり、彼のスクリプトは一度だけ動作します。私がチャート上にスクリプトを置き、スクリプトが動作して(ポジションを閉じて)、アンロードしたのです。スクリプトは必要ない、EAが必要なのだ。 Artyom Trishkin 2016.11.30 11:29 #230 Alexey Viktorov:いや、そうは思わない。このコード double openCandle[], closeCandle[]; CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle); CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle); double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]); double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);はテスト済みで動作します。ここでは単純なカスタムダブル配列で、CopyRates()は構造体の配列を埋めるので、配列関数を使用して最大値と最小値を選択することはできません。いやー、私もあなたのコードを超慎重に見ていましたよ。だから......ジョークは私のことなんです。SZY... しかし、私のコードはHigh/Low/Highest/Lowestの4つの値を返しますが、あなたのコードはHighとLowしか返しませんし、私のコードはデータコピーの成功をチェックします(全てではありませんが)、あなたのはしません...このように、私のコードでは、必要なデータが完全にコピーされているかどうかをチェックしています。//+------------------------------------------------------------------+//| sFindRangeByCandlesBody.mq4 |//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |//| https://login.mql5.com/ru/users/artmedia70 |//+------------------------------------------------------------------+#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"#property link "https://login.mql5.com/ru/users/artmedia70"#property version "1.00"#property strict#property script_show_inputs//--- input parametersinput int Begin=1; // Бар начала диапазона поискаinput int RangeBars=20; // Диапазон поиска//---int bars=Bars(Symbol(),PERIOD_CURRENT);int begin=(Begin<0?0:Begin>bars-3?bars-3:Begin);int rangeBars=(RangeBars<2?2: RangeBars>bars-begin?bars-begin: RangeBars); // Диапазон поиска//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+void OnStart() {//--- MqlRates array[]; double high=0, low=0; int highest=-1, lowest=-1; if(CopyRates(Symbol(),PERIOD_CURRENT,begin,rangeBars,array)==rangeBars) { ArraySetAsSeries(array,true); high=GetHighestValue(begin,array,highest); low=GetLowestValue(begin,array,lowest); } Print("High=",DoubleToString(high,Digits()),", Highest=",highest,", Low=",DoubleToString(low,Digits()),", Lowest=",lowest); }//+------------------------------------------------------------------+double GetHighestValue(int bar_begin, MqlRates &array[], int &bar_highest){ int sz=ArraySize(array); if(sz==0) return(-1); double high=DBL_MIN; bar_highest=-1; for(int i=0; i<sz; i++) { double value=fmax(array[i].open,array[i].close); if(value>high) { high=value; bar_highest=bar_begin+i; } } return(high);}//+------------------------------------------------------------------+double GetLowestValue(int bar_begin, MqlRates &array[], int &bar_lowest){ int sz=ArraySize(array); if(sz==0) return(-1); double low=DBL_MAX; bar_lowest=-1; for(int i=0; i<sz; i++) { double value=fmin(array[i].open,array[i].close); if(value<low) { low=value; bar_lowest=bar_begin+i; } } return(low);}//+------------------------------------------------------------------+ Any questions from newcomers question Regarding reading history 初心者の方からの質問 MQL5 MT5 MetaTrader 1...161718192021222324252627282930...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
完全に混乱しています。
double blevel=OrderStopLoss()<Bid-Point*TS; works for me.SLは利益だけを考えて価格を追求する。
double slevel=OrderStopLoss()>Ask+Point*TS; これをelseに追加 する方法がわからない。
boolではありません。
boolではなく、暗黙の変換と呼ばれるものです
ところで、あなたは何をしているのですか?トロール?
boolではありませんが、暗黙の変換ということで
ところで、あなたは何をしているのですか?トロール?
はい、トロールを作ろうとしました。元のスクリプトは、注文の利益に達したときに閉じるだけでした。
そうです、トロールを作ろうとしたのです。元のスクリップは、ある注文で利益に達したときに閉じるだけでした
ロジックです。
ループ内で選択された現在の注文の利益が設定値より大きい場合、そのストップロスが計算されたストップロス・トロール・レベルより小さい(買いの場合)/大きい(売りの場合)場合、ストップを新しい値にシフトさせる。
これは一言で言えば
それは私が提案したことではありませんか?
ええ、まあ...あまりに不用意にコードを見たので、全く見なかったと言った方が良いくらいです。でも、それが半分くらいで、あとは恥ずかしくなるくらいくだらないことを言ってしまっている。なぜか突然、ArrayMaximum() が構造体の配列、あるいはこの配列の別のフィールドに適用されるかもしれないという、おかしな考えが浮かんだのです。
私は後悔しています、私は他の人にそう思うことを助言しません、それはうまくいきません...:)
ええ、まあ...あまりに不用意にコードを見たので、全く見なかったと言った方が良いくらいです。でも、それが半分くらいで、あとは恥ずかしくなるくらいくだらないことを言ってしまっている。なぜか突然、ArrayMaximum()を構造体の配列、あるいはこの配列の別のフィールドに適用することができる、というおかしなアイデアが浮かんだのです。
私は後悔しています、私は他の人にそう思うことを助言しません、それはうまくいきません...:)
まあ...そして私はというと、同じようにあなたのコードに目を通して、あなたに感謝しました。
要するに-どちらも冗談の価値がある...。
スクリプトではなく、Expert Advisorです。プログラムの種類を混同しているのでは?スクリプトはチャート上にロードされた後一度だけ実行され、その後削除されます。ループしていない場合。ポジションを 閉じるためのループスクリプトを作る人はほとんどいないでしょう。
とのことです。
以下は、MT4標準のclose.mq4スクリプトを少し修正したものです。MetaTraderのThomasScriptsフォルダにファイルを置いて ください。
まあ...私はというと、あなたのコードをちらっと見ただけで、本当に短くて助かったと頭を下げてしまいました...。
要するに-どちらも冗談の価値がある...。
いや、納得できない。このコード
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
動作確認済みです。単純なユーザー定義のダブル配列があり、CopyRates()は構造体の配列を埋めるので、配列を扱う関数を使用して最大と最小を選択することはできません。
とのことです。
以下は、MT4標準のclose.mq4スクリプトを少し修正したものです。このファイルをMetaTraderのArchitectureScriptsフォルダ に置きます。
つまり、彼のスクリプトは一度だけ動作します。私がチャート上にスクリプトを置き、スクリプトが動作して(ポジションを閉じて)、アンロードしたのです。
スクリプトは必要ない、EAが必要なのだ。
いや、そうは思わない。このコード
CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle);
CopyClose(_Symbol, PERIOD_CURRENT, 1, 15, closeCandle);
double maxCandle = fmax(openCandle[ArrayMaximum(openCandle)], closeCandle[ArrayMaximum(closeCandle)]);
double minCandle = fmin(openCandle[ArrayMinimum(openCandle)], closeCandle[ArrayMinimum(closeCandle)]);
はテスト済みで動作します。ここでは単純なカスタムダブル配列で、CopyRates()は構造体の配列を埋めるので、配列関数を使用して最大値と最小値を選択することはできません。
いやー、私もあなたのコードを超慎重に見ていましたよ。だから......ジョークは私のことなんです。![](https://c.mql5.com/3/111/pardon.gif)
SZY... しかし、私のコードはHigh/Low/Highest/Lowestの4つの値を返しますが、あなたのコードはHighとLowしか返しませんし、私のコードはデータコピーの成功をチェックします(全てではありませんが)、あなたのはしません...![](https://c.mql5.com/3/111/9d_coffee.gif)
このように、私のコードでは、必要なデータが完全にコピーされているかどうかをチェックしています。
//| sFindRangeByCandlesBody.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Begin=1; // Бар начала диапазона поиска
input int RangeBars=20; // Диапазон поиска
//---
int bars=Bars(Symbol(),PERIOD_CURRENT);
int begin=(Begin<0?0:Begin>bars-3?bars-3:Begin);
int rangeBars=(RangeBars<2?2:
RangeBars>bars-begin?bars-begin:
RangeBars); // Диапазон поиска
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
MqlRates array[];
double high=0, low=0;
int highest=-1, lowest=-1;
if(CopyRates(Symbol(),PERIOD_CURRENT,begin,rangeBars,array)==rangeBars) {
ArraySetAsSeries(array,true);
high=GetHighestValue(begin,array,highest);
low=GetLowestValue(begin,array,lowest);
}
Print("High=",DoubleToString(high,Digits()),", Highest=",highest,", Low=",DoubleToString(low,Digits()),", Lowest=",lowest);
}
//+------------------------------------------------------------------+
double GetHighestValue(int bar_begin, MqlRates &array[], int &bar_highest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double high=DBL_MIN;
bar_highest=-1;
for(int i=0; i<sz; i++) {
double value=fmax(array[i].open,array[i].close);
if(value>high) {
high=value;
bar_highest=bar_begin+i;
}
}
return(high);
}
//+------------------------------------------------------------------+
double GetLowestValue(int bar_begin, MqlRates &array[], int &bar_lowest){
int sz=ArraySize(array);
if(sz==0) return(-1);
double low=DBL_MAX;
bar_lowest=-1;
for(int i=0; i<sz; i++) {
double value=fmin(array[i].open,array[i].close);
if(value<low) {
low=value;
bar_lowest=bar_begin+i;
}
}
return(low);
}
//+------------------------------------------------------------------+