MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 135 1...128129130131132133134135136137138139140141142...1953 新しいコメント zsu1970 2017.02.27 14:14 #1341 Vitaly Muzichenko: 価格を一度に入れるのか、それとも価格を取得してから計算に入れるのか?ヴィタリー・ムジチェンコ 価格は一度に設定するのか、それとも価格を取得してから計算に貼り付けるのか? int k=period; for(int i=1; i<=period; i++){ H1_Close[i]=Close[k]; k--;} 1はタイムセッションの最後のバーであり、計算はi番目から始めなければならないので、最後のクローズバーから始まる期間と同じタイムセッションの塊を取り、配列で反転させます。 つまり、私の関数は最後に閉じたバーのSMMA値を返す必要があります。 ANDREY 2017.02.27 14:17 #1342 皆さん、こんにちは。 以下のコードは、単純なアイデアを符号化したものです。 最後に閉じた注文がSELの場合 最後に決済された注文がNELにあった場合 NELの注文を開くif (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY)) if ( OrderType ()==OP_SELL) X = OrderProfit( ); if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY)) if ( OrderType ()==OP_BUY) if(X < 0) OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"17-10",123 ); 質問 このコードにさらに2つの条件を 追加するには、どのような言語構成にすればよいでしょうか(赤枠で囲んでいます)。 最後に閉じた注文がNELの場合最後のCELオーダーが終了した場合 最後の決済注文がNELで決済された場合最後に決済した注文がSLで 決済されている場合よろしく お願いします。 説明だけでなく、コードを書いていただけるとありがたいです。 初心者の方からの質問 MQL5 MT5 MetaTrader Questions from Beginners MQL5 Any questions from newcomers 0B53RV3R 2017.02.27 15:12 #1343 こんにちは。保留中の注文を すべて削除するスクリプトを書いています。ただし、削除されるのは1オーダーのみです。私はいつも2つの注文を保留しているか、1つにしています。どちらの場合も、買い指値は1つしか削除されません。売りの逆指値を削除するには、他の買いの逆指値注文がない場合に、再度スクリプトを実行する必要があります。どこがエラーなのかご指摘ください。void DeleteOrders(){int Total=OrdersTotal();for(int i=0;i<Total;i++)if(OrderSelect(i,SELECT_BY_POS)){int type=OrderType()、ticket=OrderTicket()。bool c;切替型{ケース 4.c=OrderDelete(ticket)です。if(!c)Print(GetLastError())を実行します。が壊れる。ケース 5.c=OrderDelete(ticket)です。if(!c)Print(GetLastError())を実行します。が壊れる。}}} Any questions from newcomers 初心者の方からの質問 MQL4 MT4 MetaTrader Break even point code... Maxim Kuznetsov 2017.02.27 15:18 #1344 0B53RV3R: こんにちは。保留中の注文を すべて削除するスクリプトを書いています。ただし、削除されるのは1オーダーのみです。私はいつも2つの注文を保留しているか、1つにしています。どちらの場合も、買い指値は1つしか削除されません。売りの逆指値を削除するには、他の買いの逆指値注文がない場合に、再度スクリプトを実行する必要があります。エラーの発生箇所をお知らせください。void DeleteOrders(){int Total=OrdersTotal();for(int i=0;i<Total;i++)if(OrderSelect(i,SELECT_BY_POS)){int type=OrderType()、ticket=OrderTicket()。bool c;切替型{ケース 4.c=OrderDelete(ticket)です。if(!c)Print(GetLastError())を実行します。が壊れる。ケース 5.c=OrderDelete(ticket)です。if(!c)Print(GetLastError())を実行します。が壊れる。}}} 探索の方向を変える for(i=total-1;i>=0;i--) 0B53RV3R 2017.02.27 15:48 #1345 Maxim Kuznetsov: 探索の方向を変える for(i=total-1;i>=0;i--) ありがとうございます、これでうまくいきました。インデックス0のオーダーが削除されると、インデックス1のオーダーにインデックス0が割り当てられ、次の反復でi==1、そのようなオーダーは存在しないと理解してよいでしょうか?このような場合、教えていただけますか? Artyom Trishkin 2017.02.27 15:49 #1346 0B53RV3R: ありがとうございます、これでうまくいきました。インデックス0のオーダーが削除されると、インデックス1のオーダーにインデックス0が割り当てられ、次の反復ではi==1となり、そのようなオーダーは現れないという理解でよいでしょうか?ということがわかるでしょうか。 そうですね。 Vitaly Muzichenko 2017.03.03 04:57 #1347 カスタマイズ可能なフラクタル機能があるんですが、まあゲッ、やけに重いですね。オブジェクトの描画は、フラクタルが正しく形成されているかどうかを視覚的に示すためだけに残しているんだ。質問:ビジュアルテストが バカバカしいので、どうやったら簡単にできるのか。extern int FrLeft=15; // Баров слеваextern int FrRight=5; // Баров справа//-----------------------------------------------------------------------------------------------void OnTick() { int nFrUp= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_UPPER); // Возвращает номер бара int nFrDn= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_LOWER); // Возвращает номер бара double FrHigh = High[nFrUp]; // Цена верхнего фрактала double FrLow = Low [nFrDn]; // Цена нижнего фрактала SetArrow("FrUp"+"_"+(string)Time[nFrUp], Time[nFrUp], High[nFrUp], clrDeepSkyBlue, 217, 2, ANCHOR_BOTTOM); SetArrow("FrDn"+"_"+(string)Time[nFrDn], Time[nFrDn], Low[nFrDn], clrDeepPink, 218, 2, ANCHOR_TOP); // Comment("Price: ",FrHigh,", Num: ",nFrUp,"\nPrice: ",FrLow,", Num: ",nFrDn); }//----------------------------------------------------------------------------------------------+//---------------------- Возвращает номер бара фрактала (настраиваемый) ------------------------+//----------------------------------------------------------------------------------------------+int GetBarFractal(string symb,ENUM_TIMEFRAMES tf=0,int nLeft=2,int nRight=2,int numFr=0,int mode=MODE_UPPER) { int i=0,cn=0,pos=0,r=0,l=0,e=0,equals,bars; double _high[], _low[]; nLeft=nLeft<=2?2:nLeft; nRight=nRight<=2?2:nRight; equals=nLeft+nRight; bars=Bars(symb,tf)-equals; ArraySetAsSeries(_high,true); ArraySetAsSeries(_low,true); for(pos=nRight+1; pos<bars; pos++) { r=nRight; if(mode==MODE_UPPER) { CopyHigh(symb,tf,0,pos+equals+1,_high); for(i=1; i<=r; i++) { if(_high[pos]<=_high[pos-i]) break; }} if(mode==MODE_LOWER) { CopyLow(symb,tf,0,pos+equals+1,_low); for(i=1; i<=r; i++) { if(_low[pos]>=_low[pos-i]) break; }} //-- if(i==r+1) { l=nLeft; e=equals; for(int j=1; j<=l+equals; j++) { if(mode==MODE_UPPER) { if(_high[pos]<_high[pos+j]) break; if(_high[pos]>_high[pos+j]) l--; if(_high[pos]==_high[pos+j]) e--; } if(mode==MODE_LOWER) { if(_low[pos]>_low[pos+j]) break; if(_low[pos]<_low[pos+j]) l--; if(_low[pos]==_low[pos+j]) e--; } if(l==0) { cn++; if(cn>numFr) return(pos); } //-- if(e<0) break; }} } Print(__FUNCTION__": Фрактал не найден"); return(0); }//----------------------------------------------------------------------------------------------+//------------------- Функция рисования значка на графике, объект OBJ_ARROW --------------------+//----------------------------------------------------------------------------------------------+void SetArrow(string nm="", datetime t1=0, double p1=0, color col=clrRed, int code=252, int width=1, int anchor=0) { if(ObjectFind(0,nm)==-1) { ObjectCreate(0,nm,OBJ_ARROW,0,0,0); ObjectSetInteger(0,nm,OBJPROP_COLOR,col); ObjectSetInteger(0,nm,OBJPROP_ARROWCODE,code); ObjectSetInteger(0,nm,OBJPROP_ANCHOR,anchor); ObjectSetInteger(0,nm,OBJPROP_WIDTH,width); ObjectSetInteger(0,nm,OBJPROP_SELECTED,false); ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true); ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false); ObjectSetDouble(0,nm,OBJPROP_PRICE,p1); ObjectSetInteger(0,nm,OBJPROP_TIME,t1); } }ありがとうございます。 Any questions from newcomers [ARCHIVE]Any rookie question, so エキスパートアドバイザー - 雑多な質問 Alexey Viktorov 2017.03.03 07:09 #1348 Vitaly Muzichenko:カスタマイズ可能なフラクタル機能があるんですが、まあゲッ、やけに重いですね。オブジェクトの描画は、フラクタルが正しく形成されているかどうかを視覚的に示すためだけに残しているんだ。質問:目視でテスト するのは馬鹿らしいので、どうしたら簡単にできるでしょうか。ありがとうございます。 すべてインジケーターにすることで、より簡単にすることができるのです。チャートの左上のコメントや、特にテスター自身がつけるポジションの開閉 マークでさえ、テストが遅くなってしまうのです。 Andy-D 2017.03.03 09:11 #1349 こんにちは。新参者にアドバイスをお願いします。以下はその一例です。if(条件1)if(条件2){}さもなくば{}コードによると、Elseはif(condition1)を参照し、condition1が満たされない場合に実行されるはずです。 しかし、実際には、条件2が満たされない場合にも実行される。 Alekseu Fedotov 2017.03.03 09:27 #1350 Andy-D:こんにちは。新参者にアドバイスをお願いします。以下はその一例です。if(条件1)if(条件2){}さもなくば{}コードによると、Elseはif(condition1)を参照し、condition1が満たされない場合に実行されるはずです。 しかし、実際には条件2が満たされないと実行される。 状態ですぐにくるくる矯正をかける習慣を身につけるif(条件){}A質問内容により if(Условие1) { if(Условие2) { } } else { } 1...128129130131132133134135136137138139140141142...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
価格を一度に入れるのか、それとも価格を取得してから計算に入れるのか?
価格は一度に設定するのか、それとも価格を取得してから計算に貼り付けるのか?
for(int i=1; i<=period; i++)
{
H1_Close[i]=Close[k];
k--;
}
1はタイムセッションの最後のバーであり、計算はi番目から始めなければならないので、最後のクローズバーから始まる期間と同じタイムセッションの塊を取り、配列で反転させます。
つまり、私の関数は最後に閉じたバーのSMMA値を返す必要があります。
以下のコードは、単純なアイデアを符号化したものです。
最後に閉じた注文がSELの場合
最後に決済された注文がNELにあった場合
NELの注文を開く
if ( OrderType ()==OP_SELL)
X = OrderProfit( );
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))
if ( OrderType ()==OP_BUY)
if(X < 0)
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"17-10",123 );
質問
このコードにさらに2つの条件を 追加するには、どのような言語構成にすればよいでしょうか(赤枠で囲んでいます)。
最後に閉じた注文がNELの場合
最後のCELオーダーが終了した場合
最後の決済注文がNELで決済された場合
最後に決済した注文がSLで 決済されている場合
よろしく お願いします。
説明だけでなく、コードを書いていただけるとありがたいです。
こんにちは。保留中の注文を すべて削除するスクリプトを書いています。ただし、削除されるのは1オーダーのみです。私はいつも2つの注文を保留しているか、1つにしています。どちらの場合も、買い指値は1つしか削除されません。売りの逆指値を削除するには、他の買いの逆指値注文がない場合に、再度スクリプトを実行する必要があります。エラーの発生箇所をお知らせください。
探索の方向を変える for(i=total-1;i>=0;i--)
ありがとうございます、これでうまくいきました。インデックス0のオーダーが削除されると、インデックス1のオーダーにインデックス0が割り当てられ、次の反復ではi==1となり、そのようなオーダーは現れないという理解でよいでしょうか?ということがわかるでしょうか。
カスタマイズ可能なフラクタル機能があるんですが、まあゲッ、やけに重いですね。オブジェクトの描画は、フラクタルが正しく形成されているかどうかを視覚的に示すためだけに残しているんだ。
質問:ビジュアルテストが バカバカしいので、どうやったら簡単にできるのか。
extern int FrRight=5; // Баров справа
//-----------------------------------------------------------------------------------------------
void OnTick()
{
int nFrUp= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_UPPER); // Возвращает номер бара
int nFrDn= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_LOWER); // Возвращает номер бара
double FrHigh = High[nFrUp]; // Цена верхнего фрактала
double FrLow = Low [nFrDn]; // Цена нижнего фрактала
SetArrow("FrUp"+"_"+(string)Time[nFrUp], Time[nFrUp], High[nFrUp], clrDeepSkyBlue, 217, 2, ANCHOR_BOTTOM);
SetArrow("FrDn"+"_"+(string)Time[nFrDn], Time[nFrDn], Low[nFrDn], clrDeepPink, 218, 2, ANCHOR_TOP);
// Comment("Price: ",FrHigh,", Num: ",nFrUp,"\nPrice: ",FrLow,", Num: ",nFrDn);
}
//----------------------------------------------------------------------------------------------+
//---------------------- Возвращает номер бара фрактала (настраиваемый) ------------------------+
//----------------------------------------------------------------------------------------------+
int GetBarFractal(string symb,ENUM_TIMEFRAMES tf=0,int nLeft=2,int nRight=2,int numFr=0,int mode=MODE_UPPER) {
int i=0,cn=0,pos=0,r=0,l=0,e=0,equals,bars;
double _high[], _low[];
nLeft=nLeft<=2?2:nLeft;
nRight=nRight<=2?2:nRight;
equals=nLeft+nRight;
bars=Bars(symb,tf)-equals;
ArraySetAsSeries(_high,true);
ArraySetAsSeries(_low,true);
for(pos=nRight+1; pos<bars; pos++) {
r=nRight;
if(mode==MODE_UPPER) {
CopyHigh(symb,tf,0,pos+equals+1,_high);
for(i=1; i<=r; i++) {
if(_high[pos]<=_high[pos-i]) break;
}}
if(mode==MODE_LOWER) {
CopyLow(symb,tf,0,pos+equals+1,_low);
for(i=1; i<=r; i++) {
if(_low[pos]>=_low[pos-i]) break;
}}
//--
if(i==r+1) {
l=nLeft;
e=equals;
for(int j=1; j<=l+equals; j++) {
if(mode==MODE_UPPER) {
if(_high[pos]<_high[pos+j]) break;
if(_high[pos]>_high[pos+j]) l--;
if(_high[pos]==_high[pos+j]) e--;
}
if(mode==MODE_LOWER) {
if(_low[pos]>_low[pos+j]) break;
if(_low[pos]<_low[pos+j]) l--;
if(_low[pos]==_low[pos+j]) e--;
}
if(l==0) {
cn++;
if(cn>numFr) return(pos);
}
//--
if(e<0) break;
}}
}
Print(__FUNCTION__": Фрактал не найден");
return(0);
}
//----------------------------------------------------------------------------------------------+
//------------------- Функция рисования значка на графике, объект OBJ_ARROW --------------------+
//----------------------------------------------------------------------------------------------+
void SetArrow(string nm="", datetime t1=0, double p1=0, color col=clrRed,
int code=252, int width=1, int anchor=0) {
if(ObjectFind(0,nm)==-1) {
ObjectCreate(0,nm,OBJ_ARROW,0,0,0);
ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
ObjectSetInteger(0,nm,OBJPROP_ARROWCODE,code);
ObjectSetInteger(0,nm,OBJPROP_ANCHOR,anchor);
ObjectSetInteger(0,nm,OBJPROP_WIDTH,width);
ObjectSetInteger(0,nm,OBJPROP_SELECTED,false);
ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
ObjectSetDouble(0,nm,OBJPROP_PRICE,p1);
ObjectSetInteger(0,nm,OBJPROP_TIME,t1);
}
}
ありがとうございます。
カスタマイズ可能なフラクタル機能があるんですが、まあゲッ、やけに重いですね。オブジェクトの描画は、フラクタルが正しく形成されているかどうかを視覚的に示すためだけに残しているんだ。
質問:目視でテスト するのは馬鹿らしいので、どうしたら簡単にできるでしょうか。
ありがとうございます。
こんにちは。新参者にアドバイスをお願いします。
以下はその一例です。
if(条件1)
if(条件2)
{
}
さもなくば
{
}
コードによると、Elseはif(condition1)を参照し、condition1が満たされない場合に実行されるはずです。
しかし、実際には、条件2が満たされない場合にも実行される。
こんにちは。新参者にアドバイスをお願いします。
以下はその一例です。
if(条件1)
if(条件2)
{
}
さもなくば
{
}
コードによると、Elseはif(condition1)を参照し、condition1が満たされない場合に実行されるはずです。
しかし、実際には条件2が満たされないと実行される。
状態ですぐにくるくる矯正をかける習慣を身につける
if(条件)
{
}
A質問内容により
{
if(Условие2)
{
}
}
else
{
}