[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 148

 
Konstebl:

EAが取引を開始しない理由を教えてください Error 130.Stop Loss = 55 pips (4 digits of quotes)


あなたのEAを少し改造してみました。初値を 間違えないようにプロテクトをかけた。

 extern int PeriodLWMA=14;
 extern int tp=55;
 extern int sl=55;
 extern double MaxRisk=10;
 extern double Lot=0.1;
 bool NewBar()
  {
       static datetime lastbar = 0;
       datetime curbar = iTime(Symbol(), 0, 0);
       if(lastbar!=curbar)
       {
             lastbar=curbar;
             return (true);
       }
       return(false);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
    int ticket;
    double price,takeprofit,stoploss,Lots;
//----
    double frUP = iFractals(NULL,0,MODE_UPPER,3);
    double frLOW = iFractals(NULL,0,MODE_LOWER,3);
    double lwma = iMA(NULL,0,PeriodLWMA,0,MODE_LWMA,PRICE_CLOSE,0);
    frUP = iFractals(NULL,0,MODE_UPPER,3);
    frLOW = iFractals(NULL,0,MODE_LOWER,3);
       double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT);
       double MinLot = MarketInfo(Symbol(),MODE_MINLOT);
       Lots = NormalizeDouble(AccountFreeMargin()/10*MaxRisk/1000,2);
    if(Lots>MaxLot)
       Lots = MaxLot;
    else Lots=Lot;
    if(Lots<MinLot)
       Lots = Lot;
//----
    static bool flag = true;
    if(NewBar())
      flag = true;
      if(Ask>lwma && frUP>Ask && frUP != EMPTY_VALUE && flag)
         {
         price = NormalizeDouble(frUP+(Ask-Bid)+30*Point,Digits);
         takeprofit = NormalizeDouble(price+tp*Point,Digits); 
         stoploss = NormalizeDouble(price-sl*Point,Digits);
         ticket = OrderSend(Symbol(),OP_BUYSTOP,Lots,price,5,stoploss,takeprofit,"Fractal",123,0,Blue);
         if(ticket>0 && GetLastError()==0)
            flag = false;
// Печатаем ошибку только в том случае, если она действительно случилась
         else Print("Ошибка № ",GetLastError()," OP_BUYSTOP Ask=",DoubleToStr(Ask,8)," Bid=",DoubleToStr(Bid,8)," OpenPrice=",DoubleToStr(price,8)," sl=",DoubleToStr(stoploss,8)," tp=",DoubleToStr(takeprofit,8));
            return(ticket);
         }
//-------------------------------------------------------------------
    if(NewBar())
      flag = true;
      if(Bid<lwma && frLOW<Bid && frLOW>0 && frLOW!=EMPTY_VALUE && flag)
         {
         price = NormalizeDouble(frLOW-30*Point,Digits);
         takeprofit = NormalizeDouble(price-tp*Point,Digits);
         stoploss = NormalizeDouble(price+sl*Point,Digits);
         ticket = OrderSend(Symbol(),OP_SELLSTOP,Lots,price,5,stoploss,takeprofit,"Fractal",123,0,Red);
         if(ticket>0 && GetLastError()==0)
            flag = false;
// Печатаем ошибку только в том случае, если она действительно случилась
          else Print("Ошибка № ",GetLastError()," OP_SELLSTOP Ask=",DoubleToStr(Ask,8)," Bid=",DoubleToStr(Bid,8)," OpenPrice=",DoubleToStr(price,8)," sl=",DoubleToStr(stoploss,8)," tp=",DoubleToStr(takeprofit,8));
            return(ticket);
         }
  }
 
Vinin:

そして、このオプションは 適さない。最高ではない。


調べてみましたが、残念ながら違うようです。キャンドルをそっくりそのまま描きたい。
 
ありがとうございました。
 
Vinin:

うまくいきますが、結果は違ってきます。期待しているものとは違う

何が問題なのか、教えてください。慣れない機能を持つこのプログラムを使いこなすのは、やはり難しいですね。


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

 
arabon:

何が問題なのか、教えてください。慣れない機能で、このプログラムを使いこなすのは、やはり大変です。


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


double CalculateProfit_last() {//прибыль от последенй сделки
   double Profit = 0;
   int cnt;
   if(OrdersTotal()!=0)
   {
     cnt = OrdersTotal() - 1;
        OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
           if (OrderType() == OP_BUY || OrderType() == OP_SELL) Profit = OrderProfit();
   }
   Profit=0.0;  // Зачем вести расчеты, если потом их обнулить
   Print(Profit);
   return (Profit);
}
そして、どのような順番で話を進めていくのか。最後のオープンまたは最後のクローズオーダーについて話しています。唯一無二の存在であれば、疑問は消えます。
 
Vinin:

また、どの順番で話を進めているのでしょうか?最後のオープンオーダーまたは最後のクローズオーダー。唯一無二の存在であれば、その疑問は消える。

最後に閉じた注文の利益を計算する必要があるのですが、もちろんそれだけではありません。


P.S.なぜか吹き出してしまいました =)

   }
   Profit=0.0;  // Зачем вести расчеты, если потом их обнулить
   Print(Profit);
   return (Profit);
}
 


こんにちは。このコードはテスト用です。まず、行番号を表示させるにはどうしたらいいのか。

さらに言うと、上記のコード「ca[1]=Low[100]; Only this variant is reassigned」において配列内のデータはループ内部でのみ再代入 されます。おそらく、チャートデータを表示するために配列を割り当てた場合、一度しか再割り当てできないのではないでしょうか?

int start(){
int i=0 ;int k=0 ;
 while(i<=5000) 
   { 
  k=0 ;
  ca[i]=0;
 volume[i]=0;
 while(k<=10)
 {ca[i]= ca[i]+Volume[i+k]*(High[i+k]+Low[i+k])/2;
  volume[i]=volume[i]+Volume[i+k];
   k=k+1; } ca[i]=ca[i]/volume[i];
    i=i+1;//ca[1]=Low[100]; Переобозначение происходит только в этом варианте  
  }
  ca[1]=Low[100];//Переобозначение не происходит программа не видит  
  int a1=1;
  while(a1==1)//Переобозначение не происходит программа не видит
  {ca[1]=Low[100];
  a1=a1+1;}
  return(0);
  }
 
どうやら自分の質問に答えてしまったようだ。
int start(){
int i=0 ;int k=0 ;
 while(i<=500) 
   { 
  k=0 ;
  ca1[i]=0;
 volume[i]=0;
 while(k<=10)
 {ca1[i]= ca1[i]+Volume[i+k]*(High[i+k]+Low[i+k])/2;
  volume[i]=volume[i]+Volume[i+k];
   k=k+1; } ca1[i]=ca1[i]/volume[i];
    i=i+1;
  }
 ca1[0]=Low[100];//Переобозначение  происходит программа  Видит
  //Цикл заполнения массива для отображения значений функции 
   i=0;
    while(i<=500)//Переобозначение происходит программа  Видит
     {ca[i]=ca1[i];
      i=i+1;}
  return(0);
  }
 
T-G:
買いポジションと売りポジションで資金(AccountEquity())と担保(AccountMargin())が別々になっているのですが、どのように分けているのか教えてください。

I. Kimのcustom fi ndingsにこれらのfindingsがあるかどうか確認してください: https://www.mql5.com/ru/forum/131859

С

 
すみません。
leonid553:

I. Kimのcustom fi ndingsにこれらのfindingsがあるかどうか確認してください: https://www.mql5.com/ru/forum/131859

С


残念ながら、見つかりませんでした。