Я нашел кого-то, кто написал стратегию оповещения о запуске сигналов тревоги, и в результате, я обнаружил, что сигнал не был запущен, и в реальном времени я обнаружил ошибку, может, вы поможете мне посмотреть код?

Period_list = [PERIOD_D1,12*60*60,6*60*60, 4*60*60,3*60*60,PERIOD_H1,45*60, PERIOD_M30, PERIOD_M15, PERIOD_M5, PERIOD_M1];// Список минутных линий lastTime=0; var malevel0 = new Array(); // определить словарь malevel0[symbol]=0; function OnBar(record,symbol) { if (record==null) return; var len=record.length-1; if(len<200) return;
var ma200=TA.MA(record,ma_len)
var cci = talib.CCI(record, cci_len)
if(record[len].Open<ma200[len])
malevel0[symbol]=1;
var con=(malevel0[symbol]==1) && record[len].Open>ma200[len] && cci[len]>cci_value
//Log("con",malevel0[symbol]l,malevel0,record[len].Open,ma200[len],cci[len],record[len-1].Open,ma200[len-1]);
if(con)
{
malevel0[symbol]=0;
str = _D(record[record.length - 1].Time);//把 此刻的 毫秒时间 转换成 字符串(能看懂的)
Log("条件提示["+symbol+str+"]推送微信@" ); //输出一条信息 并推送微信
}
} /* Функция profit_order () / остановка { prices=get_last_price() if(prices==null) return; if{CheckPositionDirect}==1)// Многопозиционный { if( prices[0]-stop_price>profit_perent*stop_price/100) { Log ((“больше чешуй”,prices[0],stop_price); ClosePosition(prices[0]); reset(); } }else if(CheckPositionDirect() ==-1) // свободный склад { if( stop_price-prices[1] >profit_perent*stop_price/100) { Log ((“Пустота”,prices[1],stop_price); ClosePosition(prices[1]); reset(); } }
} */
// Основная логика сделки
function OnTick(symbol)
{
//exchange.SetContractType(“swap”);
record = exchange.GetRecords(Period_list[period]);
if(record==null)
return;
if (record[record.length - 1].Time != lastTime) {
//Log(“Появились новые столбцы K”,symbol, record[record.length - 1].Time);
lastTime = record[record.length - 1].Time; // Необходимо обновить lastTime, это очень важно.
OnBar ((record,symbol);// Модель закрытия цены
}
}
// Платформа основана на уровне tick function main() { falg=1; var contract_list=[“BTC_USDT”,“ETH_USDT”] for(var i=0; i } } }