export class Main extends Indicator { // create and export a class named Main - a child class (inheriting from the property) of the Indicator predefined class, which in turn is a child of the mScript predefined class. // constructor creates and initializes the objects necessary for the indicator to work constructor () { // "In the constructor, the super keyword is used as a function that calls the parent constructor. It must be called before the first call to the this keyword in the body of the constructor." super (); // Set indicator properties[// mtrader7.com/docs/Terminal/mScript/JavaScript/v1/mScript/setProperty] this.setProperty(Property.SeparateWindow, true); // Is the indicator data displayed in a separate window? true = yes; this.setProperty (Property.ShortName, "A / D"); // Indicator display name = A / D // Add to the indicator initialization dialog a request for the type of used price (PriceType) - Bid or Ask // mtrader7.com/docs/Terminal/mScript/JavaScript/v1/mScript/addInput this.addInput("Тип цены", InputType.PriceType, PriceType.Bid);
this.buffers = { // create the necessary buffers for work mtrader7.com/docs/Terminal/mScript/JavaScript/v1/mScript/addBuffer ExtMapBuffer1 : this.addBuffer(), // ;the buffer in this indicator is one }; } // end of constructor method onInit () {// Initialization of the indicator, executed immediately after loading by the client terminal this.buffers.ExtMapBuffer1 // initialization of the indicator value buffer .setShape (Shape.Line) // set the type of chart - line .setColor (Color.LightSeaGreen) // default line color; in the dialog box, you can select another
; } // end of the onInit function async onUpdate () {// onUpdate is a standard function that is executed every time a new tick is received by the symbol for which the indicator is calculated const {PriceType} = this.getInputs (), // get the previously requested price type and save it as a PriceType constant {ExtMapBuffer1} = this.buffers, // get accumulated buffer data // request from the terminal data High, Low, Close, Volume for all bars and wait for the filling of the corresponding arrays // mtrader7.com/ru/docs/Terminal/mScript/JavaScript/v1/Bar/load { High, Low, Close, Volume } = await Bar.load ([// await is a program execution is suspended until all data is received Bar.Mode.High, Bar.Mode.Low, Bar.Mode.Close, Bar.Mode.Volume, ], PriceType), // for the corresponding price type barSize = Close.length; // barSize = the number of elements in the array Close // let is a declaration of variables valid only within the given program block let i, h, l, c, countedBars = Bar.counted (); // countedBars = the number of bars that have not changed since the last launch of the indicator i = barSize - countedBars - 1; // set the number of iterations of the loop // The while statement creates a loop that executes a given set of instructions while the condition is being verified. The logical value of the condition is computed before the loop body is executed. " // developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/while while (i> = 0) {// loop through i from the beginning of the data to the end - to the last (current, zero) bar // save the values of arrays High, Low and Close in temporary variables for the current bar (with index i) h = High [i]; l = Low [i]; c = Close [i]; // calculate the buffer value - Y coordinate of the indicator line ExtMapBuffer1.set (i, ((c - l) - (h - c))); // set the value of the i-th element equal to (Close [i] - Low [i]) - (High [i] – Close[i]) mtrader7.com/ru/docs/Terminal/mScript/JavaScript/v1/Buffer/set if (ExtMapBuffer1.get (i)! == 0) {// if now the value of ExtMapBuffer1 [i] is not 0; //mtrader7.com/ru/docs/Terminal/mScript/JavaScript/v1/Buffer/get let diff = h - l; // High [i] - Low [i] if (0 === diff) {// if the resulting diff is zero ExtMapBuffer1.set (i, 0); // set the value of the ith element of the buffer = 0 } else {// if the resulting diff is not zero ExtMapBuffer1.set (i, (ExtMapBuffer1.get (i) / diff)); ExtMapBuffer1.set (i, (ExtMapBuffer1.get (i) * Volume [i])); } // end if (0 === diff) } // end if (ExtMapBuffer1.get (i)! == 0) if (i