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

 

>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)です。

}

 
forexpipsrunner: このように書けるかどうか教えてください。トレードを開こうとしません。

提案されたコードは、インジケーターのように見えます。取引はExpert Advisorまたはスクリプトによって開かれます。OrderSend関数 呼び出しは、インジケータで許可されて いません。インジケーターはアラームを鳴らすことができます - 適切な場所にAlert機能の呼び出しや音を挿入してください

 
STARIJ:

提案されたコードは、指標に近いものです。取引はExpert Advisorまたはスクリプトによって開かれます。インジケータでOrderSend関数 呼び出しが禁止 されている。インジケーターがシグナルを発することがある-適切な場所にアラート機能のコールまたはサウンドを挿入する


これはTPの定義コードで、結果をOrderSendに送ります。この複雑なアルゴリズムがなければ、取引は送信されますが、送信する方法がありません。私は関数 TP = TakeLong(SHP)を呼び出して います。

 
forexpipsrunner: これは、OrderSendに結果を与えるTP定義コードです。 このアルゴリズムがなければ、トレードは送信されません。

デバッグ(エラーがあることが確定したときに、そのエラーを発見する作業)には、さまざまな方法があります。1) F5 - MetsEditorでデバッグを開始する。 2) Alertsを使って実行をトレースする。3、4)デバッグ情報をテキストラベルとComment関数に 出力する。便利な方法を選んで、この簡単な関数をデバッグする--そうすれば、あなたもプログラマーになれるでしょう。数千行に及ぶプログラムは、複雑とみなされる。

 
forexpipsrunner:

そのように書くことができるかどうか教えてください。トランザクションを開こうとしません。計算された数値のフォーマットが間違っているのか、それとも他のコードの欠陥なのでしょうか?


int take=0 - 整数を返すのだから、この変数はdoubleであるべきではないか?
 
こんにちは!「レール」パターンを作りたいのですが、ローソク足の胴体の大きさがわかりません...。


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();
}

正しいですか?どうすればうまくいくのか?
 
sviter-pro:   こんにちは、「レール」の模様を作りたいのですが、キャンドルの胴体の大きさがわかりません...。

M1デモ口座 で試されましたか?何を得るか?

 
STARIJ:

M1デモ口座 で試されましたか?その成果はいかがですか?

何も動かない......(((
削除済み  
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());
     }
  }

なぜトロールが毎ティック ごとに発生するのか、教えてください。