エラー、バグ、質問 - ページ 823

 
MetaDriver:

散発的なエラーの95%は、初期化エラーやその不足に関連しています。 ですから、コードの断片は 役に立ちませんし、コード全体が偏執的であるため、役に立ちません ;-)。

原因は顕在化した場所から非常に遠いところに求めるべきであり、それはアフタにとってつまらないことです。開発者が撃たれることを要求する方が簡単なのです。必ず役に立ちます。

// 本当に助かりますよね、falkovさん。)

素晴らしい役立つはず!と思える。:)

私はぶっきらぼうに初期化 EVERYWHERE AND ALWAYS!数行後に変数に値を代入しても。変数を宣言 するときは、nullか空文字列で初期化する、という鉄則を作ったところです :)

パラノイアについて......まったくその通りです。

メタドライバーさん、シャーマンなんですねー。

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
falkov:

素晴らしい助かるような気がする!:)

:)

イニシャライズはバカエベンキ!

信じられない! 今回は見逃したに違いない :)

// 本当にもう一度、この角度からコード全体に目を通して確認してください。

// 「私はいつでも...!」という自分のあくびに対する認識をフィルターするのは、「いつでも、いつでも」という信念かもしれません:))

 
MetaDriver:
:)

信じられない!今回は確実に見逃した(笑) :)

// 本当にもう一度、この角度からコード全体に目を通してみてください。

// 「I ALWAYS...!」のために、自分のあくびに対する認識をフィルターすることができるのは、「EVERYWHERE and EVERYWHERE」の信念です:)) 。

シャーマン!って言ってるんですよ。週末に、すべてのEAファイル(数千行)をチェックしました。それに、古いライブラリで初期化されていない変数が2つも3つもあったのは事実です。

私のルールは、関数本体の 最初にすべての変数を宣言し(これはずっとそうでした)、すぐに初期化することです(昨年、おそらく)。

私は自分のことをダミーだとは思っていません - 私は100種類以上のインデックス/スクリプト/アドバイザーを書いてきました :)

そして今、私は氷上の魚のように悪戦苦闘しています。自分を撃つこともできるんだ!

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 

ちなみにコードはこんな感じです。

//Найти первое adblArray_Short х adblArray_Long  ПОСЛЕ (позже) intShift_PastSearch (поиск от intShift_PastSearch до нулевого бара)
void FindCrossArrays_PastThisShift(structS & structSled) {
    datetime adtmDTM[];
    int intShift=0;
   
    if(structSled.intShift_PastSearch>_cintBarsAmountForCalc) {return;}
    else if(structSled.intShift_PastSearch<=0) {return;}
   
    ArrayResize(adtmDTM,structSled.intBarsAmountForCalc);
    ArrayInitialize(adtmDTM,0);
    ArraySetAsSeries(adtmDTM,true);
   
    CopyTime(structSled.strSymbol,structSled.enumTF,0,structSled.intShift_PastSearch+1,adtmDTM);

    intShift=structSled.intShift_PastSearch;
   

                                    ▼ - вот здесь ошибка - array out of range in '_indMyAO_from_SetPeriod.mq5' (390,37)
    while(structSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}


    if(structSled.adblArray_Short[intShift]>structSled.adblArray_Long[intShift]) {
        while(structSled.adblArray_Short[intShift]>structSled.adblArray_Long[intShift] && intShift>0) {intShift--;}
       
        if(intShift>0) {
            structSled.intRet_FindingDirection=-1;
            structSled.intRet_FindingShift=intShift;
        }
        else {
            structSled.intRet_FindingDirection=0;
            structSled.intRet_FindingShift=intShift;
        }
    }   
    else if(structSled.adblArray_Short[intShift]<structSled.adblArray_Long[intShift]) {
        while(structSled.adblArray_Short[intShift]<structSled.adblArray_Long[intShift] && intShift>0) {intShift--;}
       
        if(intShift>0) {
            structSled.intRet_FindingDirection=1;
            structSled.intRet_FindingShift=intShift;
        }
        else {
            structSled.intRet_FindingDirection=0;
            structSled.intRet_FindingShift=intShift;
        }
    }   
    structSled.dtmRet_FindingDTM=adtmDTM[structSled.intRet_FindingShift];
    return;
}
//-------------------------------------------------------------------------------------------------

 
falkov: ちなみにコードはこちらです。

うーん、配列の オーバーランをチェックしないのはなぜだろう intShift=structSled.intShift_PastSearch;

intShiftが配列の境界から外れている場合 while(structSled.adblArray_Short[intShift]==structSled.adblArray_Long[intShift] && intShift>1) {intShift--;}.

は、コードが左から右に実行され、structSled.adblArray_Short[intShift]への参照が && intShift>1 の前に発生するので、すぐにエラーが発生します。

intShift=structSled.intShift_PastSearch; の後にチェックを入れて、配列外の exit であれば出力 Print(Hurray! It worked!)

このように

 
こんばんは、こんな機能はないでしょうか。
void  PositionModify( int PositionTicket= PositionGetInteger(POSITION_IDENTIFIER), double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
      {  MqlTradeRequest request;
         MqlTradeResult result;
        request.action= TRADE_ACTION_SLTP; 
        request.order= PositionTicket; 
        request.price= price;
        request.symbol= Symbol();
        request.sl= stoploss;
        request.tp= takeprofit;
        return (OrderSend( request,   result    ));   
      }
この場合、宣言時に構造体をゼロにする必要があるのでしょうか?
 
ありがとうございます!
 

この形でコンパイルしてみたんだ、怖いね。

'PositionGetInteger' - constant expected.mq5 65 44 constant という単語を見かけました。しかし、何が必要なのか?関数の1行目にあります。

そして、他の変数の宣言もこんな感じですが、関数はヘルプ通りに宣言しましたよね?

'price' - パラメータ order.mq5 のデフォルト値がありません 65 92

 
ありがとうございます、今コンパイル中です。