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

 
STARIJ:
スクリプトを書き、各ステートメントの後に情報を表示する + GetLastError()と Alert()- 上記のスクリプト例を参照してください。
コードにエラーがある場合、どうすればよいですか?スクリプトが動かないとAlert()も効かない!
 
Lowech:
コードにエラーがある場合、どのようにすればよいですか?スクリプトが動かないのに、Alert()は役に立ちません!

スクリプトの最初の行以外を捨てて、Alertを追加 する。 その後、徐々に追加する - プログラムとデバッグの方法を学ぶ

 
LRA:
早かったですね。バーの検索はどのように行うのですか?ループの中か、時間構造を使うか?

EUR USD

//+-------------------------------------------------------+
//| Проверка дней недели                       PRVERKA.mq4|
//| если первая пятница месяца была бычьей, а             |
//| 2-й понедельник медвежий - открываем сделку на продажу|
//+-------------------------------------------------------+
#property strict
void OnStart()
{
  int День=Day(), ДеньН=DayOfWeek();
  Alert("----------------------");
  int ДеньНачалаМесяца = (ДеньН-День+36) % 7;

// Если день начала месяца = 6, то число первой пятницы равно 7. Иначе 6 - день начала месяца
  int ЧислоПервойПятницы = ДеньНачалаМесяца==6?7:6-ДеньНачалаМесяца;

// Если день начала месяца < 2, то число второго понедельника равно 9 - день начала месяца. Иначе 16 - день начала месяца
  int ЧислоВторогоПонедл = (ДеньНачалаМесяца<2?9:16)-ДеньНачалаМесяца;
  Alert("ЧислоПервойПятницы = ", ЧислоПервойПятницы, "  ЧислоВторогоПонедл = ", ЧислоВторогоПонедл);

  if(ЧислоВторогоПонедл>=День)
  {
    Alert("Надо подождать числа ", ЧислоВторогоПонедл+1);
    return;   // Отключил до числа, следующего за вторым понедельником
  }

  int Продавать=0;
  for(int Бар=0;;Бар++)  //  Ищем на D1 номера баров для заданных чисел месяца
  {
    if(TimeDay(iTime(NULL,PERIOD_D1,Бар))==ЧислоВторогоПонедл)
    {
      if(iClose(NULL,PERIOD_D1,Бар)<iOpen(NULL,PERIOD_D1,Бар)) Продавать++;
      break;
    }
    if(TimeDay(iTime(NULL,PERIOD_D1,Бар))==ЧислоПервойПятницы)
      if(iClose(NULL,PERIOD_D1,Бар)>iOpen(NULL,PERIOD_D1,Бар)) Продавать++;
  }
  if(Продавать==2) bool x=OrderSend(_Symbol, OP_SELL, 0.1, Bid, 7, 0, 0);
}
 
LRA:

スクリプトから最初の行以外を削除し、Alertを追加する。 その後、徐々に追加していく。

うまくいかなかった( でも、ありがとうございました。
 
int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
int tip=OrderType();
Afternoon.私は、私は売り注文を閉じて、次の注文は買いオープンにする必要があります、私は注文履歴を 使用して、最後の閉鎖された注文を見つけるとその種類を知りたいのですが、私はそれを行うことはできません(誰が間違っているのか知って、教えてください)私は答えを知っていない場合、それは私がコードを動作させるのに役立ちますが、書かないでください!私は、私はそれを行う必要があります、私はそれを行う必要があります。
 
Lowech:
int 1 = OrdersHistoryTotal();
if (OrderSelect(1,SELECT_BY_POS,MODE_HISTORY))
int tip=OrderType(); Afternoon
.私は、私は売り注文を閉じて、次の注文は買いオープンにする必要があります、私は注文履歴を 使用して最後のクローズ順序を見つけるとその種類を知りたいのですが、私はできません(誰が私が間違っているのか知って、教えてください)私は答えを知っていない場合、それは私がコードを動作させるのに役立ちます、書いてはいけませんよ
翻訳しようとすると、エラーメッセージが表示されます。'1' - 名前が予想されます。番号 1 の代わりに変数名が必要です
 

こんばんは、以下のコードです、私はティックカウンターを書きました、私のアイデアは、ティックがループ内のすべてのバーでカウントされ、すべての新しいバーで カウンタがリセットされ、私は指標を実行すると、それは前のバー1ティックで、現在のティックはからカウントし始めることをコメントで述べています。

違う魔法のスプライトを使おうとすると、なぜ使おうとしたのかわからなくなるのですが、なぜでしょうか?もしかして、書き方が悪かった?

#property indicator_chart_window
double old_price;
double count_plus=0,count_minus=0,sum=0,psum=0;
bool Fun_New_Bar=false;
datetime Prev_Time=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

  double price;
  int i=0;
  int limit; 
  double delta; 
limit=rates_total-prev_calculated;
if(prev_calculated<1) limit=rates_total-1;
for(i=limit; i>=0; i--)  
{
 if (Fun_New_Bar==false)                              
  {                                             
   
   if (Prev_Time==0) 
     {
        Prev_Time=time[i];
        Fun_New_Bar=false;
     }
   if(Prev_Time!=time[i])                        
     {
      Prev_Time=time[i];
      psum=sum;
      count_plus=0;
      count_minus=0;
      sum=0;                         
      Fun_New_Bar=false;                            
     }
    } 
  if(old_price==0) old_price=close[i];
   
    price = close[i];
    delta = price - old_price;
     
     //-- считаем "верхние" тики 
    if(delta>=0) {
      count_plus++;
               }
      
     //-- считаем "нижние" тики
    if(delta<0) {
      count_minus++;
        }
    sum=count_minus+count_plus;   
        //----
    old_price=price;
    
  Comment(StringFormat("Выводим цены\ncount_minus = %G\ncount_plus = %G\nsum = %G\npsum = %G",count_minus,count_plus,sum,psum));
}

   return(rates_total);
  }
 
PokrovMT5:

こんばんは、以下のコードです、私はティックカウンターを書きました、私のアイデアは、ティックがループ内のすべてのバーでカウントされ、すべての新しいバーで カウンタがリセットされ、私は指標を開始するとき、それはコメントで言うことを前のバー1ティックで、現在のティックはからカウントを開始することである。

違う魔法のスプライトを使おうとすると、なぜ使おうとしたのかわからなくなるのですが、なぜでしょうか?もしかして、書き方が悪かった?

問題と質問の理解が正しければ、ティックは履歴に保存されません。私のインジケーターを ご覧ください。

 
Alexey Viktorov:

問題や設問を正しく理解すれば、履歴に刻みを保存することはありません。私のインジケーターを ご覧ください。


リンクがうまくいかず、no pageと表示される

 
PokrovMT5:

こんばんは、以下のコードです、私はティックカウンターを書きました、私のアイデアは、ティックがループ内のすべてのバーでカウントされ、すべての新しいバーで カウンタがリセットされ、私は指標を開始するとき、それはコメントで言うことを前のバー1ティックで、現在のティックはからカウントを開始することである。

違う魔法のスプライトを使おうとすると、なぜ使おうとしたのかわからなくなるのですが、なぜでしょうか?もしかして、書き方が悪かった?

return rates_total-1 or 0

理由: