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

 
Vitaly Muzichenko:
価格を一度に入れるのか、それとも価格を取得してから計算に入れるのか?
ヴィタリー・ムジチェンコ
価格は一度に設定するのか、それとも価格を取得してから計算に貼り付けるのか?
int k=period;
for(int i=1; i<=period; i++)
{
H1_Close[i]=Close[k];
k--;
}
1はタイムセッションの最後のバーであり、計算はi番目から始めなければならないので、最後のクローズバーから始まる期間と同じタイムセッションの塊を取り、配列で反転させます。
つまり、私の関数は最後に閉じたバーのSMMA値を返す必要があります。
 
皆さん、こんにちは。
以下のコードは、単純なアイデアを符号化したものです。
最後に閉じた注文がSELの場合
最後に決済された注文がNELにあった場合
NELの注文を開く
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                            
if ( OrderType ()==OP_SELL)                                            
X = OrderProfit( );                                            

if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                            
if ( OrderType ()==OP_BUY)                                              
if(X < 0)                                              

OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"17-10",123 );



質問
このコードにさらに2つの条件を 追加するには、どのような言語構成にすればよいでしょうか(赤枠で囲んでいます)。

最後に閉じた注文がNELの場合
最後のCELオーダーが終了した場合
最後の決済注文がNELで決済された場合
最後に決済した注文がSLで 決済されている場合

よろしく お願いします。


説明だけでなく、コードを書いていただけるとありがたいです。
 
こんにちは。保留中の注文を すべて削除するスクリプトを書いています。ただし、削除されるのは1オーダーのみです。私はいつも2つの注文を保留しているか、1つにしています。どちらの場合も、買い指値は1つしか削除されません。売りの逆指値を削除するには、他の買いの逆指値注文がない場合に、再度スクリプトを実行する必要があります。どこがエラーなのかご指摘ください。

void DeleteOrders()
{
int Total=OrdersTotal();
for(int i=0;i<Total;i++)
if(OrderSelect(i,SELECT_BY_POS))
{
int type=OrderType()、ticket=OrderTicket()。
bool c;
切替型
{
ケース 4.
c=OrderDelete(ticket)です。
if(!c)
Print(GetLastError())を実行します。
が壊れる。
ケース 5.
c=OrderDelete(ticket)です。
if(!c)
Print(GetLastError())を実行します。
が壊れる。
}
}
}
 
0B53RV3R:
こんにちは。保留中の注文を すべて削除するスクリプトを書いています。ただし、削除されるのは1オーダーのみです。私はいつも2つの注文を保留しているか、1つにしています。どちらの場合も、買い指値は1つしか削除されません。売りの逆指値を削除するには、他の買いの逆指値注文がない場合に、再度スクリプトを実行する必要があります。エラーの発生箇所をお知らせください。

void DeleteOrders()
{
int Total=OrdersTotal();
for(int i=0;i<Total;i++)
if(OrderSelect(i,SELECT_BY_POS))
{
int type=OrderType()、ticket=OrderTicket()。
bool c;
切替型
{
ケース 4.
c=OrderDelete(ticket)です。
if(!c)
Print(GetLastError())を実行します。
が壊れる。
ケース 5.
c=OrderDelete(ticket)です。
if(!c)
Print(GetLastError())を実行します。
が壊れる。
}
}
}
探索の方向を変える for(i=total-1;i>=0;i--)
 
Maxim Kuznetsov:
探索の方向を変える for(i=total-1;i>=0;i--)
ありがとうございます、これでうまくいきました。インデックス0のオーダーが削除されると、インデックス1のオーダーにインデックス0が割り当てられ、次の反復でi==1、そのようなオーダーは存在しないと理解してよいでしょうか?このような場合、教えていただけますか?
 
0B53RV3R:
ありがとうございます、これでうまくいきました。インデックス0のオーダーが削除されると、インデックス1のオーダーにインデックス0が割り当てられ、次の反復ではi==1となり、そのようなオーダーは現れないという理解でよいでしょうか?ということがわかるでしょうか。
そうですね。
 

カスタマイズ可能なフラクタル機能があるんですが、まあゲッ、やけに重いですね。オブジェクトの描画は、フラクタルが正しく形成されているかどうかを視覚的に示すためだけに残しているんだ。

質問:ビジュアルテストが バカバカしいので、どうやったら簡単にできるのか。

extern int FrLeft=15; // Баров слева
extern int FrRight=5; // Баров справа

//-----------------------------------------------------------------------------------------------
void OnTick()
{
int nFrUp= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_UPPER); // Возвращает номер бара
int nFrDn= GetBarFractal(Symbol(),PERIOD_CURRENT,FrLeft,FrRight,0,MODE_LOWER); // Возвращает номер бара
double FrHigh = High[nFrUp]; // Цена верхнего фрактала
double FrLow  = Low [nFrDn]; // Цена нижнего фрактала

SetArrow("FrUp"+"_"+(string)Time[nFrUp], Time[nFrUp], High[nFrUp], clrDeepSkyBlue, 217, 2, ANCHOR_BOTTOM);
SetArrow("FrDn"+"_"+(string)Time[nFrDn], Time[nFrDn], Low[nFrDn], clrDeepPink, 218, 2, ANCHOR_TOP);

// Comment("Price: ",FrHigh,", Num: ",nFrUp,"\nPrice: ",FrLow,", Num: ",nFrDn);
}

//----------------------------------------------------------------------------------------------+
//---------------------- Возвращает номер бара фрактала (настраиваемый) ------------------------+
//----------------------------------------------------------------------------------------------+
int GetBarFractal(string symb,ENUM_TIMEFRAMES tf=0,int nLeft=2,int nRight=2,int numFr=0,int mode=MODE_UPPER) {
int i=0,cn=0,pos=0,r=0,l=0,e=0,equals,bars;
double _high[], _low[];
nLeft=nLeft<=2?2:nLeft;
nRight=nRight<=2?2:nRight;
equals=nLeft+nRight;
bars=Bars(symb,tf)-equals;
ArraySetAsSeries(_high,true);
ArraySetAsSeries(_low,true);

  for(pos=nRight+1; pos<bars; pos++) {
   r=nRight;
   if(mode==MODE_UPPER) {
    CopyHigh(symb,tf,0,pos+equals+1,_high);
    for(i=1; i<=r; i++) {
     if(_high[pos]<=_high[pos-i]) break;
   }}
   if(mode==MODE_LOWER) {
    CopyLow(symb,tf,0,pos+equals+1,_low);
    for(i=1; i<=r; i++) {
     if(_low[pos]>=_low[pos-i]) break;
   }}
   //--
   if(i==r+1) {
    l=nLeft;
    e=equals;
     for(int j=1; j<=l+equals; j++) {
      if(mode==MODE_UPPER) {
       if(_high[pos]<_high[pos+j])  break;
       if(_high[pos]>_high[pos+j])  l--;
       if(_high[pos]==_high[pos+j]) e--;
      }
      if(mode==MODE_LOWER) {
       if(_low[pos]>_low[pos+j])  break;
       if(_low[pos]<_low[pos+j])  l--;
       if(_low[pos]==_low[pos+j]) e--;
      }
      if(l==0) {
       cn++;
       if(cn>numFr) return(pos);
      }
      //--
      if(e<0) break;
   }}
  }
   Print(__FUNCTION__": Фрактал не найден");
  return(0);
}

//----------------------------------------------------------------------------------------------+
//------------------- Функция рисования значка на графике, объект OBJ_ARROW --------------------+
//----------------------------------------------------------------------------------------------+
void SetArrow(string nm="", datetime t1=0, double p1=0, color col=clrRed,
                                           int code=252, int width=1, int anchor=0) {
if(ObjectFind(0,nm)==-1) {
    ObjectCreate(0,nm,OBJ_ARROW,0,0,0);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
    ObjectSetInteger(0,nm,OBJPROP_ARROWCODE,code);
    ObjectSetInteger(0,nm,OBJPROP_ANCHOR,anchor);
    ObjectSetInteger(0,nm,OBJPROP_WIDTH,width);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,false);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetDouble(0,nm,OBJPROP_PRICE,p1);
    ObjectSetInteger(0,nm,OBJPROP_TIME,t1);
   }
}

ありがとうございます。

 
Vitaly Muzichenko:

カスタマイズ可能なフラクタル機能があるんですが、まあゲッ、やけに重いですね。オブジェクトの描画は、フラクタルが正しく形成されているかどうかを視覚的に示すためだけに残しているんだ。

質問:目視でテスト するのは馬鹿らしいので、どうしたら簡単にできるでしょうか。

ありがとうございます。

すべてインジケーターにすることで、より簡単にすることができるのです。チャートの左上のコメントや、特にテスター自身がつけるポジションの開閉 マークでさえ、テストが遅くなってしまうのです。
 

こんにちは。新参者にアドバイスをお願いします。

以下はその一例です。

if(条件1)

if(条件2)

{

}

さもなくば

{

}

コードによると、Elseはif(condition1)を参照し、condition1が満たされない場合に実行されるはずです。

しかし、実際には、条件2が満たされない場合にも実行される。

 
Andy-D:

こんにちは。新参者にアドバイスをお願いします。

以下はその一例です。

if(条件1)

if(条件2)

{

}

さもなくば

{

}

コードによると、Elseはif(condition1)を参照し、condition1が満たされない場合に実行されるはずです。

しかし、実際には条件2が満たされないと実行される。


状態ですぐにくるくる矯正をかける習慣を身につける

if(条件)

{

}

A質問内容により

if(Условие1)
   {
       if(Условие2)

        {

        }
    }
   else

    {

    }