正方形や長方形を描画する本当に助けが必要だ... - ページ 5

 
Alex_Profit:

どうすればいいのかわからない。ヒントを教えてください。期間は最長で1ヶ月です。

変数t_Line.に1st,2nd,3rd,4th,kvの値を入れる必要が あります。

理解できない。

ぜひお願いします。

ああ、これはなんというプログラムなんだろう......。自分の書いたものを理解したのか、何なのか?なぜ、同じカウンターに2つのループがあるのですか?少なくとも、反復毎に手動で変数iの 値をチェックする。

barsToProcessとは?どこで宣言され、何と等しいのか?このようなコードを書くときは、自分を責めて、無駄なことをしないようにしなければなりません。

また、MN1の周期で動作させるために、チャートが動作しているTFのバーをカウントするのは意味がありません。

チャート上で常時動作しながら、四半期ごとに1行ずつ描画するようなインジケータを書く必要はないと思いますし、これらのタスクについては、実行、マークアップ・チャート、アンロードをスクリプトで行うことになると思います。

 

私が書いたわけではなく、こんなインジケータを見つけて分解し始めたのです。自分も始めたばかりなので、下手くそなんですけどね。取扱説明書を読みましたが、理解できないことがあります。きしみ」を感じながら運転しています。相談できる掲示板があるのは良いことだと思います。プログラミングを題材に誰かと話ができたらいいなと思います。

講評をいただいた方、ありがとうございました。しかし、この問題は未解決のままです。とにかく対応に感謝します。

 
Alex_Profit:

私が書いたわけではなく、こんなインジケータを見つけて分解し始めたのです。自分も始めたばかりなので、下手くそなんですけどね。取扱説明書を読みましたが、理解できないことがあります。きしみ」を感じながら運転しています。相談できる掲示板があるのは良いことだと思います。プログラミングを題材に誰かと話ができたらいいなと思います。

講評をいただいた方、ありがとうございました。しかし、この問題は未解決のままです。でも、対応してくれてありがとうございました。

まあ、これは下絵なんですが、例えば、今、膝の上で、ざっとスクリプトを書いたんです。

void OnStart()
{
   int limit=iBars(_Symbol,PERIOD_MN1);
   for(int i=0;i<=limit;i++)
   {
      datetime timemn=iTime(_Symbol,PERIOD_MN1,i);
      int  month=TimeMonth(timemn);
      if(month==1 || month==4 || month==7 || month==10)
      {
         int qt=0;
         switch(month)
         {
            default:break;
            case 1: qt=1;break;
            case 4: qt=2;break;
            case 7: qt=3;break;
            case 10: qt=4;break;
         }
 
         string name=StringConcatenate("Qt"+IntegerToString(qt)+", "+TimeToStr(timemn));
         ObjectCreate (name,OBJ_VLINE,0,timemn,0);         //--- Создаём обьект вертикальную линию
         ObjectSet    (name,OBJPROP_STYLE,2);              //--- Со стилем
         ObjectSet    (name,OBJPROP_COLOR,DimGray);        //--- Со цветом  
         ObjectSet    (name,OBJPROP_WIDTH,0);              //--- С  толщиной
         ObjectSet    (name,OBJPROP_BACK,0);               //--- С типом отображения. Объект на заднем плане
      }
   }   
}

小さな欠点 - 四半期が週末に始まる場合、線は 金曜日の最後のバーで描か れます。また、履歴の最初の四半期も、例えば履歴が2日目に始まる場合、線がないまま残ります。これは、月の番号を指定するもので、1日でない場合は、次の次の月の番号を取るようにします。

このスクリプトのすべての行をチャートから削除するには、このスクリプトを実行します。

void OnStart()
{
     ObjectsDeleteAll(0,"Qt");
}

また、スクリプトの初期化時にマークアップの削除を行うなど、ループしたスクリプトを作成することができます。

また、設定にラインパラメータを入れることもでき、いろいろなことができるようになりました。

 
evillive:

これはラフスケッチで、例えば膝の上でざっと書いただけです。

素晴らしいことです。ありがとうございました。

この技を覚えるのに、どれくらいの時間がかかるんだろう?

 

言語リファレンスを読んで、何がどこにあるか覚えているのと同じくらいの時間です。

これは、少なくともC言語のような言語のプログラミングスキルをお持ちであることが前提です。スキルは構文だけでなく、プログラムがどのように「生きる」のか、何が何に続くのかを理解する必要があります。

それが無理でも、学びたいという意欲があれば、1年あれば十分だと思います。

 
evillive:

それがなくても、学びたいのであれば、1年あれば十分すぎるほどです。

わかったよ。

 

どう対処したらいいのかもわからない。仕上げをしたいんです。私もまだやり方がわからないんです。

縦線が 引かれているのは、問題ない。しかし、ハイバーの青いバーをどう描くかは、まだ謎です。

ラインは当日からです。 バッファにバインドしようとするとうまくいきませんでした。

是非ともご協力をお願いします。

ありがとうございます。

 
Alex_Profit:

どう対処したらいいのかもわからない。仕上げをしたいんです。私もまだやり方がわからないんです。

縦線が引かれているのは、問題ない。しかし、ハイバーの青いバーをどう描くかは、まだ謎です。

ラインは当日からです。 バッファにバインドしようとするとうまくいきませんでした。

是非ともご協力をお願いします。

ありがとうございます。

コードを見せてください、一緒に修正しましょう。
 

蹴らないでください、コードが「ずさん」なんです。それはもう理解しています。事例や失敗を重ねながら、論理的な結果にたどり着きたいと思います。

最低限のタスク、それが機能する。そして、経験を積むことで「よりかわいく」なっていくのです。

//+------------------------------------------------------------------+

#property strict

#property indicator_chart_window

   

    //---  Внешние Глобальные переменные 

extern int     barsToProcess = 5;        //--- Кол-во отображаемых периодов (линий) 


    //---  Глобальные переменные    

string Name_VLine;     //--- Имя Элементов

string Name_CHECK;     //--- Имя Элементов


//MqlDateTime mqlDateTime;

MqlRates    mqlRates[1];


//+------------------------------------------------------------------+

int init()

  {  

    return(0);

  }

//+------------------------------------------------------------------+

int deinit()

  {

   int i;  

         for (i=0; i<Bars; i++)                              //--- Выбираем все установленные объекты  

           {

              ObjectDelete(Name_VLine + " VLine"  + DoubleToStr(i,0));          //--- Удаляем все объекты

              ObjectDelete(Name_CHECK + "H_CHECK"  + DoubleToStr(i,0));  //--- Удаляем все объекты

              ObjectDelete(Name_CHECK + "L_CHECK"  + DoubleToStr(i,0));  //--- Удаляем все объекты

           }       

   return(0);

  }

//+------------------------------------------------------------------+

int start()

{                  

int counted_bars = IndicatorCounted();     //--- перем counted_bars = функц.  Возвращает количество баров

int limit;                                 //--- переменная  старт кол-во баров. Линии рисуем о по всем барам

   

if(counted_bars > 0) counted_bars --;      //--- последний посчитанный бар будет пересчитан 

  //--- основной цикл 

  limit = Bars - counted_bars;         

  for(int i = 0; i < limit; i ++)

      {

      

 //+------------------------ При выборе кол-ва линий отобразим их ко-во------------------------+                 

         if(limit > barsToProcess)                                     //--- Если кол-во линий > Кол-ву отображаемых периодов (линий) 

         {

          limit = barsToProcess;                                      //--- Тогда устанавливаем Кол-во отображаемых периодов (линий)

             while (i<limit)                                           //--- Пока есть линии в окне терминала. Или пока висит индикатор в окне терминала.                        

             {   

               datetime t_Line = iTime(Symbol(),PERIOD_H4,i);         //--- В ПЕРЕМ t_Line Будет Присваиваться значение времени открытия бара

               CopyRates(_Symbol, PERIOD_H4, t_Line, 1, mqlRates);

   {


         //--- кубики по хай (В место галочек нужно подставить кубики)

         ObjectCreate    (0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].high, t_Line,mqlRates[0].high);

         ObjectSetInteger(0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen); 

   

         //--- кубики по лоу (В место галочек нужно подставить кубики)

         ObjectCreate    (0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].low, t_Line,mqlRates[0].low);

         ObjectSetInteger(0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen); 

        

    //+------------------------ Рисуем вертикальную линии -----------------------------------------------------+                 

    ObjectCreate (Name_VLine + " VLine" + DoubleToStr(i,0),OBJ_VLINE,0,t_Line,0);         //--- Создаём обьект вертикальную линию

    ObjectSet    (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_STYLE,2);              //--- Со стилем

    ObjectSet    (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_COLOR,DimGray);        //--- Со цветом  

    ObjectSet    (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_WIDTH,0);              //--- С  толщиной

    ObjectSet    (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_BACK,0);               //--- С типом отображения. Объект на заднем плане

 }

  i++;

             }

          }

      }

      

   return(0);

}


 
Alex_Profit:

蹴らないでください、コードが「ずさん」なんです。それはもう理解しています。事例や失敗を重ねながら、論理的な結果にたどり着きたいと思います。

最低限のタスク、それが機能する。そして、経験を積むことで「よりかわいく」なっていくのです。

さて、どこで活躍するのでしょうか?線はTKではなく、各バーに描かれています。それとも上の写真ではTF=H1?

サイクルの各反復における限界と iが どのように等しくなるかを紙に書いて計算しなさい。

上に示した私の例は、私の理解では、決して説明されません。

ティックの矢印は、ローソク足の影を結ぶ線と同じように、インジケーターバッファを使って 描画することができます。