MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 249

 

どんなエラーかというと、DC側から見て、出来が悪いということでしょうか?

2017.07.12 12:42:48.493 '1234885286': order #247632722 sell 0.02 EURAUD closing at 1.49721 failed [Trade timeout]
 
Vitaly Muzichenko:

これはどういうエラーかというと、DC側の悪いデブリーフィングからの受け売りなんですね。

128

err_trade_timeout

タイムアウト


ハンドラの欠片。

    case 128:
      str="Истек срок ожидания совершения сделки.";
      if(detailed) str=::StringConcatenate(str, "\n", "Прежде, чем производить повторную",
                 " попытку (не менее, чем через 1 минуту), необходимо убедиться,",
                 " что торговая операция действительно не прошла (новая позиция",
                 " не была открыта, либо существующий ордер не был изменён или",
                 " удалён, либо существующая позиция не была закрыта).");
      break;
 
Artyom Trishkin:

128

err_trade_timeout

取引実行のタイムアウト時間


ハンドラの欠片。

今日、ある有名な証券会社のデモで自分のプログラムをチェックすることにして、初めてこのようなバグに直面しました。

これは証券会社のハードウェアの問題であり、私の側には関係ないという理解で合っていますか?

 

この関数が正しいかどうか教えてください。 アイデアは、価格が一定量の前のローソク足の間に平均価格を突破したかどうかを計算することです。

この関数は全く実行されないので,結果は,壊れていなければ returnToMA ==1, 壊れていれば returnToMA ==0 となるはずです.

もしかしたら、別の解決策があるのかもしれませんね。


returnToMA = MAtouch(TRADE_TF2,TRADE_TF2_MA,barscount)

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

if(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))){return(0);break;}となります。

if (iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)){return(0);break;}となります。

else return(1);

}

 
forexpipsrunner:

この関数が正しいかどうか教えてください。 アイデアは、価格が一定量の前のローソク足の間に平均価格を突破したかどうかを計算することです。

この関数は全く実行されないので,結果は,壊れていなければ returnToMA ==1, 壊れていれば returnToMA ==0 となるはずです.

もしかしたら、他にも解決策があるのでは?

最大値または最小値は常にMAより大きいか小さいか等しいので、あなたの関数は常にゼロになります。

ローソク足は、あなたの場合、少なくとも2つのパラメータで記述する必要があります。

1) ローソク足がどこで始まったかを定義する - MAより上か下か

2.1により、MAに触れたかどうかを確認する。

 
-Aleks-:

最大値または最小値は常にMAより大きいか小さいか等しいので、関数には常にゼロが含まれることになります。

ローソク足は、あなたの場合、少なくとも2つのパラメータで記述する必要があります。

1. ローソク足がどこで開いたか(MAの上か下か)を判断する。

2.1により、MAに触れたかどうかを確認する。

ありがとうございます。条件を追加しましたが、常に1が返されます。 どこかの括弧を変更すればよいのでしょうか? それともbreakが機能せず、戻り値に1が代入されて関数が終了してしまうのでしょうか?


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}となります。

if ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i) )

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}となります。

else return(1);

}

 
forexpipsrunner:

ありがとうございます。条件を追加しましたが、常に1が返されます。 どこかの括弧を変更すればよいのでしょうか? それともbreakが効かず、戻り値に1が代入されて関数が終了してしまうのでしょうか?


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}となります。

if ( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i) )

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break;}となります。

else return(1);

}


このように試してみてください。

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4,int tradema=10,int bars=100)
  {
   int x=0;
   for(int i=0;i<=bars;i++)
     {
      if(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}

      if(iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}
     }
   return(x);
  }

条件を満たせば1が返される、つまり交差点があったということです。

 
-Aleks-:

お試しください

条件を満たせば1が返される、つまり交差点があったということです。

ありがとうございます。あなたのバージョンのコードで問題なく動作します
 
forexpipsrunner:
ありがとうございます。あなたのバージョンのコードで問題なく動作します

お役に立てたようでうれしいです。
 

こんにちは。

みんな、プログラムでインジケータをチャートに 表示できるかどうか教えてくれないか?それとも手動のみ?

その場合、どのような指令が出されるのでしょうか。