MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 252 1...245246247248249250251252253254255256257258259...1953 新しいコメント Maxim Kuznetsov 2017.07.19 15:06 #2511 >err=StringToInteger((文字列)err)これは歴史に刻まれるべきものである ;-)元々errにはGetLastError()からintを取得していることは明らかです。エラーコードを 読みやすい説明に変換する ErrorDescription(err); ただし #include <stdlib.mqh> が有効であること。が、その書き方はバツが悪い。PS/そして、MQLプログラミングを学んではいけない。MQL 4と5は、特定のプラットフォーム向けのターゲット言語です。 forexpipsrunner 2017.07.19 16:48 #2512 このように書くことができるかどうか教えてください。トランザクションを開こうとしません。計算された数値のフォーマットが間違っているのでしょうか? または他のコードに欠陥があるのでしょうか?double TakeLong(double shp){int CurrentDayRange=0, fiveDayATR=0, take=0;double TP_ATR=0;////// ピボット入力double P, S1, R1, S2, R2, S3, R3;double LastHigh, LastLow, x;int counted_bars = IndicatorCounted();int limit, i;shp=iHigh(Symbol(),PERIOD_D1,0)とする。//---- Pivot インジケータの計算if(counted_bars == 0){x = Period();if(x > 240)return(-1)です。}if(counted_bars < 0)return(-1)です。limit = (Bars - counted_bars) - 1;//----for(i = limit; i >= 0; i--){if(High[i+1] > LastHigh)LastHigh = High[i+1];//----if(Low[i+1] < LastLow)LastLow=Low[i+1]とする。if(TimeDay(Time[i]) != TimeDay(Time[i+1])){P = (LastHigh + LastLow + Close[i+1]) / 3;R1 = (2*P) - LastLow;S1 = (2*P) - LastHigh;R2 = P + (LastHigh-LastLow)。S2 = P - (LastHigh-LastLow)とする。R3 = (2*P) + (LastHigh-(2*LastLow))です。S3 = (2*P) - ((2* LastHigh) - LastLow);LastLow = Open[i];LastHigh = Open[i];}}////ATRの計算for (i=1;i<6;i++){ if(iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));}; } { if(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)>1)FiveDayATR = NormalizeDouble(FiveDayATR/5,Digits());CurrentDayRange = (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));if(FiveDayATR-CurrentDayRange>0) TP_ATR=Ask+FiveDayATR-CurrentDayRange、 else TP_ATR=0;if (Bid>R1 && TP_ATR==0) take=shp;else if (Bid<R1 && R1<TP_ATR) take=R1; else take=TP_ATR;return(take)です。} Any questions from newcomers Pivot indicators How to change this Konstantin Erin 2017.07.19 17:31 #2513 forexpipsrunner: このように書けるかどうか教えてください。トレードを開こうとしません。提案されたコードは、インジケーターのように見えます。取引はExpert Advisorまたはスクリプトによって開かれます。OrderSend関数 呼び出しは、インジケータで許可されて いません。インジケーターはアラームを鳴らすことができます - 適切な場所にAlert機能の呼び出しや音を挿入してください forexpipsrunner 2017.07.19 18:03 #2514 STARIJ:提案されたコードは、指標に近いものです。取引はExpert Advisorまたはスクリプトによって開かれます。インジケータでOrderSend関数 呼び出しが禁止 されている。インジケーターがシグナルを発することがある-適切な場所にアラート機能のコールまたはサウンドを挿入するこれはTPの定義コードで、結果をOrderSendに送ります。この複雑なアルゴリズムがなければ、取引は送信されますが、送信する方法がありません。私は関数 TP = TakeLong(SHP)を呼び出して います。 Konstantin Erin 2017.07.19 18:23 #2515 forexpipsrunner: これは、OrderSendに結果を与えるTP定義コードです。 このアルゴリズムがなければ、トレードは送信されません。デバッグ(エラーがあることが確定したときに、そのエラーを発見する作業)には、さまざまな方法があります。1) F5 - MetsEditorでデバッグを開始する。 2) Alertsを使って実行をトレースする。3、4)デバッグ情報をテキストラベルとComment関数に 出力する。便利な方法を選んで、この簡単な関数をデバッグする--そうすれば、あなたもプログラマーになれるでしょう。数千行に及ぶプログラムは、複雑とみなされる。 Aleksey Vyazmikin 2017.07.19 20:30 #2516 forexpipsrunner:そのように書くことができるかどうか教えてください。トランザクションを開こうとしません。計算された数値のフォーマットが間違っているのか、それとも他のコードの欠陥なのでしょうか? int take=0 - 整数を返すのだから、この変数はdoubleであるべきではないか? ponochka 2017.07.19 21:05 #2517 こんにちは!「レール」パターンを作りたいのですが、ローソク足の胴体の大きさがわかりません...。 MathAbs( Close1[i] - Open1[i] ) / Point + 1MathAbs( Close2[i] - Open2[i] ) / Point + 1フルコードでは、次のようになります。double Close1 =iClose(Symbol(), 0, i);double Open1 = iOpen(Symbol(), 0, i);double Close2 = iClose(Symbol(), 0, i+1);double Open2 = iOpen(Symbol(), 0, i+1) となります。MathAbs( Close1[i] - Open1[i] ) / Point + 1MathAbs( Close2[i] - Open2[i] ) / Point + 1if (Close1 < Open1 && Close2 > Open2){BUY();}if (Close1 > Open1 && Close2 < Open2){SELL();}正しいですか?どうすればうまくいくのか? Konstantin Erin 2017.07.20 07:45 #2518 sviter-pro: こんにちは、「レール」の模様を作りたいのですが、キャンドルの胴体の大きさがわかりません...。M1デモ口座 で試されましたか?何を得るか? ponochka 2017.07.20 08:45 #2519 STARIJ:M1デモ口座 で試されましたか?その成果はいかがですか? 何も動かない......((( 削除済み 2017.07.20 10:04 #2520 void trailing(string symbol,string comment,int magic,int trail_p) { if(symbol==NULL) symbol=Symbol(); for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==symbol && OrderComment()==comment && OrderMagicNumber()==magic) { switch(OrderType()) { case OP_BUY: if(OrderOpenPrice()+(trail_p*Point)<Ask && OrderStopLoss()+(trail_p*Point)<Ask) { if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+(trail_p*Point),OrderTakeProfit(),OrderExpiration(),clrNONE)) { Print("OrderModify завершилась с ошибкой #",GetLastError()); } } break; case OP_SELL: if(OrderOpenPrice()-(trail_p*Point)>Bid && OrderStopLoss()-(trail_p*Point)>Bid) { if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()-(trail_p*Point),OrderTakeProfit(),OrderExpiration(),clrNONE)) { Print("OrderModify завершилась с ошибкой #",GetLastError()); } } break; } } } Comment("StopLoss=",OrderStopLoss()); } }なぜトロールが毎ティック ごとに発生するのか、教えてください。 1...245246247248249250251252253254255256257258259...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
>err=StringToInteger((文字列)err)
これは歴史に刻まれるべきものである ;-)
元々errにはGetLastError()からintを取得していることは明らかです。エラーコードを 読みやすい説明に変換する ErrorDescription(err); ただし #include <stdlib.mqh> が有効であること。
が、その書き方はバツが悪い。
PS/そして、MQLプログラミングを学んではいけない。MQL 4と5は、特定のプラットフォーム向けのターゲット言語です。
このように書くことができるかどうか教えてください。トランザクションを開こうとしません。計算された数値のフォーマットが間違っているのでしょうか? または他のコードに欠陥があるのでしょうか?
double TakeLong(double shp)
{
int CurrentDayRange=0, fiveDayATR=0, take=0;
double TP_ATR=0;
////// ピボット入力
double P, S1, R1, S2, R2, S3, R3;
double LastHigh, LastLow, x;
int counted_bars = IndicatorCounted();
int limit, i;
shp=iHigh(Symbol(),PERIOD_D1,0)とする。
//---- Pivot インジケータの計算
if(counted_bars == 0)
{
x = Period();
if(x > 240)
return(-1)です。
}
if(counted_bars < 0)
return(-1)です。
limit = (Bars - counted_bars) - 1;
//----
for(i = limit; i >= 0; i--)
{
if(High[i+1] > LastHigh)
LastHigh = High[i+1];
//----
if(Low[i+1] < LastLow)
LastLow=Low[i+1]とする。
if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
{
P = (LastHigh + LastLow + Close[i+1]) / 3;
R1 = (2*P) - LastLow;
S1 = (2*P) - LastHigh;
R2 = P + (LastHigh-LastLow)。
S2 = P - (LastHigh-LastLow)とする。
R3 = (2*P) + (LastHigh-(2*LastLow))です。
S3 = (2*P) - ((2* LastHigh) - LastLow);
LastLow = Open[i];
LastHigh = Open[i];
}
}
////ATRの計算
for (i=1;i<6;i++)
{ if(iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));}; } { if(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)>1)
FiveDayATR = NormalizeDouble(FiveDayATR/5,Digits());
CurrentDayRange = (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));
if(FiveDayATR-CurrentDayRange>0) TP_ATR=Ask+FiveDayATR-CurrentDayRange、 else TP_ATR=0;
if (Bid>R1 && TP_ATR==0) take=shp;
else if (Bid<R1 && R1<TP_ATR) take=R1;
else take=TP_ATR;
return(take)です。
}
提案されたコードは、インジケーターのように見えます。取引はExpert Advisorまたはスクリプトによって開かれます。OrderSend関数 呼び出しは、インジケータで許可されて いません。インジケーターはアラームを鳴らすことができます - 適切な場所にAlert機能の呼び出しや音を挿入してください
提案されたコードは、指標に近いものです。取引はExpert Advisorまたはスクリプトによって開かれます。インジケータでOrderSend関数 呼び出しが禁止 されている。インジケーターがシグナルを発することがある-適切な場所にアラート機能のコールまたはサウンドを挿入する
これはTPの定義コードで、結果をOrderSendに送ります。この複雑なアルゴリズムがなければ、取引は送信されますが、送信する方法がありません。私は関数 TP = TakeLong(SHP)を呼び出して います。
デバッグ(エラーがあることが確定したときに、そのエラーを発見する作業)には、さまざまな方法があります。1) F5 - MetsEditorでデバッグを開始する。 2) Alertsを使って実行をトレースする。3、4)デバッグ情報をテキストラベルとComment関数に 出力する。便利な方法を選んで、この簡単な関数をデバッグする--そうすれば、あなたもプログラマーになれるでしょう。数千行に及ぶプログラムは、複雑とみなされる。
そのように書くことができるかどうか教えてください。トランザクションを開こうとしません。計算された数値のフォーマットが間違っているのか、それとも他のコードの欠陥なのでしょうか?
MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1
フルコードでは、次のようになります。
double Close1 =iClose(Symbol(), 0, i);
double Open1 = iOpen(Symbol(), 0, i);
double Close2 = iClose(Symbol(), 0, i+1);
double Open2 = iOpen(Symbol(), 0, i+1) となります。
MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1
if (Close1 < Open1 && Close2 > Open2){
BUY();
}
if (Close1 > Open1 && Close2 < Open2){
SELL();
}
正しいですか?どうすればうまくいくのか?
M1デモ口座 で試されましたか?何を得るか?
M1デモ口座 で試されましたか?その成果はいかがですか?
なぜトロールが毎ティック ごとに発生するのか、教えてください。