Di persimpangan MA 10 dan MA 25 (periode ditentukan dalam pengaturan), algoritme ini membuka kesepakatan baru pada BELI atau ditutup jika ada.
export class Main extends Algorithm { constructor() { super(); this.setProperty(Property.Digits, 2); this.addInput('period1', InputType.int, 10, { min: 2 }, { max: 500 }); this.addInput('period2', InputType.int, 25, { min: 2 }, { max: 500 }); this.addInput('averaging', InputType.Averaging, Averaging.Simple); this.addInput('appliedPrice', InputType.AppliedPrice, AppliedPrice.Close); this.addInput('priceType', InputType.PriceType, PriceType.Bid); } onInit() {} /** * Metode pencarian perdagangan */ async getLastOpenOrder() { let orders = await Order.all(Order.Source.Trades); orders = orders.filter( (order) => order.Symbol === Current.Symbol && order.UserData === Current.ScriptId ).sort( (a, b) => b.OpenTime - a.OpenTime ); return orders.length ? orders[0] : null; } async onTick() { const { period1, period2, averaging, appliedPrice, priceType, } = this.getInputs(); // Data indikator MA pertama const list1 = await Indicators.MA( Current.Symbol, Current.TimeFrame, period1, 0, averaging, appliedPrice, priceType ); // Data dari indikator kedua MA const list2 = await Indicators.MA( Current.Symbol, Current.TimeFrame, period2, 0, averaging, appliedPrice, priceType ); // Jika garis indikator MA berpotongan if (list1[0].toFixed(Current.Digits) === list2[0].toFixed(Current.Digits)) { // Temukan transaksi terakhir yang dibuka oleh indikator ini const order = await this.getLastOpenOrder(); if (order) { // Periksa apakah transaksi dibuka di bilah lain dalam jangka waktu menit const sameBar = Bar.sameBar(order.OpenTime, Current.Time, TimeFrame.M1); if (!sameBar) { // Menutup kesepakatan await order.close(); } } else { // Kami mengambil jumlah minimum simbol const volume = Market.info(Market.Mode.VolumeMin, Current.Symbol); // Buat kesepakatan const newOrder = new Order(Current.Symbol, Order.TradeCmd.Buy, volume); // Kami menetapkan data pengguna yang akan kami cari untuk kesepakatan di masa mendatang newOrder.setUserData(Current.ScriptId); // Simpan perubahan (buka kesepakatan) await newOrder.save(); } } } }