"ダミー "からの質問 - ページ 51

 

papaklass さん、ありがとうございます!うまくいきました!今度は違いを理解 するようにします。

 

Expert Advisorがこのコードにぶら下がっている理由。

if(Orders_Total!=0)
  {
   for(i=Orders_Total;i>=0;i--)
     {
      Alert(Orders_Total);
      if(Symbol()==PositionGetSymbol(i))
        {
         OpenPrice=PositionGetDouble(POSITION_PRICE_OPEN);
         OrderLot = PositionGetDouble(POSITION_VOLUME);
         StopLoss = PositionGetDouble(POSITION_SL);
         TakeProfit=PositionGetDouble(POSITION_TP);
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            for(i=0;i<12;i++)
              {
               if(Price[i].low<lowest)
                 {
                  lowest=Price[i].low;
                 }
              }
            Alert(lowest);
            SL=NormalizeDouble(lowest-spread-_Point,_Digits);
            if(StopLoss<SL)
              {
               request.action=TRADE_ACTION_SLTP;
               request.symbol=_Symbol;
               request.volume= OrderLot;
               request.sl=SL;
               request.tp=TakeProfit;
               request.type=ORDER_TYPE_BUY;
               OrderSend(request,result);
              }
           }
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            for(i=0;i<12;i++)
              {
               if(Price[i].high>highest)
                 {
                  highest=Price[i].high;
                 }
              }
            Alert(highest);
            SL=NormalizeDouble(highest+spread+_Point,_Digits);
            if(StopLoss>SL)
              {
               request.action=TRADE_ACTION_SLTP;
               request.symbol=_Symbol;
               request.volume= OrderLot;
               request.sl=SL;
               request.tp=TakeProfit;
               request.type=ORDER_TYPE_SELL;
               OrderSend(request,result);
              }
           }
        }
     }
  }

アラートOrders_Total=2 lowestとhighも適切な値を与えますが、エキスパートがこのループでハングし、アラートの数が無限に増え、他のエラー(注文変更に関する)は与えられません。

初心者にわかるように教えてください :)

 

1つの外側サイクルと2つの内側サイクルの場合、外側サイクルの新しい反復のたびに12になる同じサイクル変数iは

 
stringo:

1つの外側サイクルと2つの内側サイクルの場合、外側サイクルの新しい反復のたびに12になる同じサイクル変数iは

ありがとうございます!!!
 

コードを修正できますか?現在のバーの始値が 必要です。よろしくお願いします

double Open[], val4;
ArraySetAsSeries(Open,true);
CopyOpen(Symbol_, PERIOD_M15,1,0,Open);
val4 = (Open[ArrayMinimum(Open,0,1)] );

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 
abeiks:

コードを修正できますか?現在のバーの始値が 必要です。よろしくお願いします

"Symbol_"は間違ったパラメータです。

また、コピーされたアイテムの数は0個です。

 

iCustomを通して 外部インジケータをEAに接続した場合、入力パラメータを動的に変更することができません。

ma_handle = iCustom(_Symbol,0,"Examples\\JJMA.ex5",MA,4);
   
ma_handle = iMA(_Symbol,0, MA,0, MODE_EMA, PRICE_CLOSE); 

このように、外部のものでは変更できないものであれば、なぜEAにコードを埋め込む必要があるのでしょうか?

申し訳ありませんが、動作はしますが、時間がかなりかかります。

 
Karlson:

iCustomを通して EAに外部インジケータを接続すると、入力パラメータを動的に変更することができません。

この場合、EAで変更できないものは、EAにコードを埋め込むにはどうすればよいのでしょうか?

インジケーターの「...入力パラメータを動的に変更することができない」?

インジケータの入力パラメータを Expert Advisorの入力パラメータとして再現します。また、ハンドルは新しいティックごとに取得するのではなく、Expert Advisorの初期化時に一度だけ取得する方がよいでしょう。

 
Yedelkin:

インジケーターの「...入力パラメータを動的に変更できない」?

インジケータの入力パラメータを Expert Advisorの入力パラメータとして再現します。また、Expert Advisor を初期化する際に、新しいティックごとにハンドルを取得するよりも、一度取得したほうがよいでしょう。

私は平均の期間がEAの作業中にATRから変化するので、平均のハンドルはOnTick()に配置されています。 実際には、EAの入力パラメータはATRの期間であり、それは変更されません。

int OnInit()
  {
  atr_handle = iATR(_Symbol,0, ATR);  //инициализируем хэндл ATR
  }

void OnTick()
  {
     CopyBuffer(atr_handle,0,0,5,atr);   //заполняем массив ATR
     ArraySetAsSeries(atr,true);

     MA=(int)(atr[1]*kMA);                 //рассчитываем период требуемый для средней от ATR

   //ma_handle = iCustom(_Symbol,0,"Examples\\JJMA.ex5",MA,4);  // получаем хэндл средней
   
     ma_handle = iMA(_Symbol,0, MA,0, MODE_EMA, PRICE_CLOSE);

     CopyBuffer(ma_handle,0,0,5,ma);     //заполняем массив средней
     ArraySetAsSeries(ma,true); 
  }
 
Karlson:

EAの実行中にATRから変化する平均期間があるので、平均のハンドルはOnTick()に置かれています。実際にはEAへの入力パラメータは ATR期間ですが、OnInit()ではATRを変化させません。

おおよそ理解できました。しかし、新しいティックで毎回インジケーターのハンドルを取得することは困難です。また、前のハンドルネームはどうするのですか?