どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 505

 
Forexman77:
もちろん、必要です!では、この構造を応用して最小値を探すにはどうすればいいのか。頭で考えても無理です)

最大値を求めるために、変数valには0が代入される(明らかにどの指標値よりも小さい)。

つまり、最小値を求めるためには、意図的に高い値を加えなければならない。EMPTY_VALUE 定数やインジケータ値を、最小値を検索するバーで直接使用することができます。

val=EMPTY_VALUE;

for(i=1;i<=15;i++) {

    ind=iMA(...,i);

   if(ind< val) val=ind;

}

あるいはこんな感じ。

val=MA(...,1);


for(i=2;i<=15;i++) {

    ind=iMA(...,i);

   if(ind< val) val=ind;

}
 
Forexman77:

もちろん、必要です!では、この構造を応用して、最小値を求めるにはどうしたらよいのでしょうか。ブレインストーミングでは解けない)
そして、配列の宣言の仕方を学びたい。こんな風にやってみました。

1と出ます。



ループは34個の値を通過し、配列には33個のセルしか含まれません、正しいです。

そして、ArrayMinimum(num_array,WHOLE_ARRAY,0) を試してみてください。

 
Forexman77:

...また、配列の宣言の仕方も学びたいのですが・・・。

トレーニングや認知のためだけなら...。

最小値と最大値を決定する周期 - チューニングや最適化を可能にするため、外部パラメータとする必要があります。

extern int p=34; 

そのため、まず配列はサイズなしで宣言されます。

double val[];

配列の宣言は関数内ではなく、コモンセクションで行われます。

init関数では、配列にサイズが設定されます。

int init(){

   ArrayResize(val,p);

} 

次に、start 関数で、配列を埋めていきます。

for(int i=0;i<p;i++) val[i]=iMA(...,i+1);

最後に、ArrayMaximum() とArrayMinimum()を配列に適用する。

 
Integer:

最大値を求めるために、変数valには0という値が代入される(明らかにインジケータのどの値よりも小さい)。

つまり、最小値を求めるためには、意図的に高い値を加えなければならない。EMPTY_VALUE定数やインジケータ値を、最小値を検索するバーで直接使用することができます。

あるいはこんな感じ。

本当にありがとうございました。
 
evillive:

配列には33個のセルしかないのに、ループは34個の値を通過している、修正せよ。

そして、ArrayMinimum(num_array,WHOLE_ARRAY,0) を試してみてください。

ありがとうございました。
 

プログラマー仲間の皆様へ困っています、助けてください。

このコードについては、すでに頭を悩ませている。

//В условии прописано что работаем с 
if(OrderType() == OP_BUY){}
//, но метатрейдер почему то игнорирует это условие, и работает только с OP_SELLLIMIT

以下は、機能の全体像です。

//+------------------------------------------------------------------+
//| Модифицируем стоплоссы                                           |
//+------------------------------------------------------------------+   
void modify_stoploss()
  {
   for(int i=0; i<=OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderMagicNumber()==magic)
              {
               if(OrderType() == OP_BUY)
                 {
                  if(chek_way()==1)
                    {
                     double stoploss=NormalizeDouble(pre_openPrice(OP_BUY),Digits);
                     Print("Стоплосс для Бай ",OrderTicket()," = ", stoploss);
                     OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,OrderTakeProfit(),0,CLR_NONE);
                    }
                 }
               if(OrderType() == OP_SELL)
                 {
                  if(chek_way()==0)
                    {
                     stoploss=NormalizeDouble(pre_openPrice(OP_SELL),Digits);
                     Print("Стоплосс для Cелл ",OrderTicket()," = ", stoploss);
                     OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,OrderTakeProfit(),0,CLR_NONE);
                    }
                 }
              }
           }
        }
     }
  }

リーチプリントで、このような出力が得られます。


チケット:225299700はOP_SELLLIMITのオーダーチケット ですが。

そして、この選択された注文のストップロスを予想通り修正します。しかし、OP_BUYは、存在するはずなのに、見当たりません。

何が問題なのでしょうか?なぜ、こんなことをするのだろう?わかるように教えてください!

 
#property strict
#include <Indicators\Trend.mqh>
bool ind;
CiMA MA;
extern int pos=1;
extern int sl=40;
extern int tp=70;
datetime time;
datetime time2;
bool trade=false;
bool trade2=false;
int a,b;
int OnInit()
  {
//---
   MA.Create(Symbol(),PERIOD_CURRENT,10,6,MODE_EMA,PRICE_CLOSE);//создал машку
//---
   return(INIT_SUCCEEDED);
   
  }
void OnTick()
  {
//---
  if(IsNewBar()==true)//если новый бар включаемся
     {
     if(buy(pos)==true)//если цена выше МА продолжаем
     {
      if(!ExistPositions(Symbol(),-1,-1,0))//если нету открых ордеров продолжаем
        {

         if(GetTypeLastClosePos(Symbol(),-1)!=OP_BUY)//если тип последней закрытой позиции был не на покупку то тогда только покупаем таким образом я пред остерегаюсь от повторных входов в покупку если цена 
//все ещо выше МА...но почему то не работает открываются и дальше сделки на покупку если ордер закрылся выше МА....ХОТЯ НЕ ДОЛЖО ТАК КАК Я ОГРАНИЧИЛ ПО ТИПУ ПОЗИЦИИ ПОСЛЕДНЮЮ СДЕЛКУ И ОНИ ДОЛЖНЫ ТОЛЬКО 
//       ЧЕРЕДОВАТСЯ И УЖ НИ КАК НЕ ПОВТОРЯТСЯ ПО НЕСКОЛЬКО РАЗ ПОДРЯД
           {
            trade=true;
           }
  if(trade==true)
        {
         OpenPosition(Symbol(),OP_BUY,0.1,Ask-sl*Point,Ask+tp*Point);
         trade=false;
        }
}
        }
    
     
if(sell(pos)==true)
{
   if(!ExistPositions(Symbol(),-1,-1,0))
     {

      if(GetTypeLastClosePos(Symbol(),-1)!=OP_SELL)
        {
         trade2=true;
        }

      if(trade2==true)
        {
         OpenPosition(Symbol(),OP_SELL,0.1,Bid+sl*Point,Bid-tp*Point);
         trade=false;
      }
  }}
 }
  }

//возвращает истину если закрытие бара  с указаной позицией выше МА

bool buy(int pos)
  {
   if(iClose(Symbol(),0,pos)>MA.Main(1))
      return true;
   else
      return false;
  }
//+------------------------------------------------------------------+
//| возвращает истину если закрытие бара  с указаной позицией ниже МА
//+------------------------------------------------------------------+
bool sell(int pos)
  {
   if(iClose(Symbol(),0,pos)<MA.Main(1))
      return true;
   else return false;
  }
2つの売買条件以外のすべての機能は、Kimのブランチから取得されています...私はどこに間違っていたのか教えてください...私は、交差点ごとに1つのトランザクションが必要です。
 

関数に関するもう一つの質問

/SetRectangle(clrBlue,"Прямоугольник",Time[10],Low[10],Time[0],High[0]);
//Если bk=true, то будет залит цветом, если false - то просто "рамка" ... sz при "просто рамка" - это ширина линий "рамки"
//

//+----------------------------------------------------------------------------+
void SetRectangle(color cl, string nm="", datetime t1=0, double p1=0, datetime t2=0, double p2=0, int sz=0, bool bk=true) {
   if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_RECTANGLE, 0, 0, 0, 0, 0);
   ObjectSet(nm, OBJPROP_TIME1   ,t1);
   ObjectSet(nm, OBJPROP_PRICE1  ,p1);
   ObjectSet(nm, OBJPROP_TIME2   ,t2);
   ObjectSet(nm, OBJPROP_PRICE2  ,p2);
   ObjectSet(nm, OBJPROP_COLOR   ,cl);
   ObjectSet(nm, OBJPROP_WIDTH   ,sz);
   ObjectSet(nm, OBJPROP_BACK    ,bk);
}

矩形を後方ではなく前方に描画する方法、例えば指定した 価格で5本前方に描画する......そして再描画しないようにするには

 
artmedia70:

調べてみました。ありがとうございます。

質問にはあまり情報がないのですが。月の1時間足のバーには極値がたくさんあります。ところで、極値とは具体的にどのようなものなのでしょうか?


月別の極値は最小と最大の2つしかないと思い込んでいたのですが...。まあ、ともかく、最初は長いコードだったから、助けを求めたわけで......。でも、気がついたら、なんとか4行に収まっていたんです。
 
教えてください。600以上のビルドで。ブローカーは実際の出来高を出すことができるのか?