// ПОДКЛЮЧАЕМЫЕ БИБЛИОТЕКИ С ФУНКЦИЯМИ// ВНЕШНИЕ ПАРАМЕТРЫ// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
Init()
{
// ПРОВЕРКА: ПРАВИЛЬНО ЛИ ВВЕДЕНЫ ЗНАЧЕНИЯ ТАЙМФРЕЙМОВ ВО ВНЕШНИХ ПАРАМЕТРАХ.
}
Deinit()
{
return(0);
}
Start()
{
// ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ// ИНДИКАТОРЫ// УСЛОВИЯ// ФУНКЦИИ ВИЗУАЛИЗАЦИИ// ФУНКЦИЯ УДАЛЕНИЯ ОРДЕРОВ ПРИ ИСПОЛНЕНИИ ОПРЕДЕЛЁННОГО УСЛОВИЯ//--- ВЫЗОВ ФУНКЦИИ УПРАВЛЕНИЯ КАПИТАЛОМ ------------------------------------------------------------------// if (Money_Management_OnOff == TRUE)
{
MM_FxProp(Delta,Start_Lot,Start_Deposit,Step_Lot,Stop_Trade,Symbol());
Lots = NormalizeDouble(GlobalVariableGet("fxprop_lot"),2);
//--- ПРОВЕРКА: ИЗМЕНИЛОСЬ ЛИ ЗНАЧЕНИЕ ЛОТА С ЦЕЛЬЮ ПЕРЕУСТАНОВКИ ОТЛОЖЕННЫХ ОРДЕРОВ ----------------//
Re_Set_All_Orders_by_Lots(dgt, Lots);
}
else Lots = 0.1;
// ФУНКЦИЯ ИНФОРМАЦИОННОЙ ПАНЕЛИ// ПРОВЕРКА НА НОВЫЙ БАР// ПРОВЕРКА НА КОЛ-ВО БАРОВ НА ГРАФИКЕ// ПРОВЕРКА НА КОЛ-ВО ЗНАКОВ В СИМВОЛЕ// УСТАНОВКА ФЛАГОВ, ЕСЛИ ИСПОЛНЯЮТСЯ УСЛОВИЯ ДЛЯ ЗАКРЫТИЯ ОПРЕДЕЛЁННЫХ ПОЗИЦИЙ// ФУНКЦИИ ЗАКРЫТИЯ ПОЗИЦИЙ ПО ОПРЕДЕЛЁННЫМ УСЛОВИЯМ// ФУНКЦИЯ ТРЕЙЛИНГ СТОПА// ФУНКЦИЯ МОДИФИКАЦИИ ОТЛОЖЕННЫХ ОРДЕРОВ// ФУНКЦИЯ УСТАНОВКИ ОТЛОЖЕННЫХ ОРДЕРОВ// ФУНКЦИЯ ОТКРЫТИЯ ПОЗИЦИИ ПО ОПРЕДЕЛЁННЫМ УСЛОВИЯМ// УДАЛЕНИЕ ОТЛОЖЕННЫХ ОРДЕРОВ ПО ОПРЕДЕЛЁННЫМ УСЛОВИЯМ//--- ЗАНОСИТЬ ДАННЫЕ В ОТЧЁТ ТОЛЬКО, ЕСЛИ КОЛ-ВО ЗАКРЫТЫХ ПОЗИЦИЙ ИЗМЕНИЛОСЬ
Amount_Positions = 0;
for(count = 0; count < OrdersHistoryTotal(); count++)
{
OrderSelect(count, SELECT_BY_POS, MODE_HISTORY);
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
Amount_Positions++;
}
}
if(Amount_Close_Deals != Amount_Positions)
{
if(Short_Trade_Report == TRUE)
{
// ФУНКЦИЯ ФОРМИРУЮЩАЯ ОТЧЁТ
}
Amount_Close_Deals = Amount_Positions;
}
}
我将如何检查呢?
谢谢你。
有没有可能使MaxEquity设置在不重启EA的情况下工作500次?
例如,如果我在计数器中写500,让它如下: 假设初始权益为10 000。
在添加到10,000的初始资产后(通过在设置中指定)--大的损失将被关闭。
这将是500次(例如)(无论如何不可能将初始股权乘以500次)。
该EA不需要重新启动,而且循环将继续进行--到20 000时将增加10 000,到30 000+10 000,如此循环500次(例如)。好的
每次增量=10 000后,减去最大的亏损订单(或几个订单 - 在设置中指定)将被关闭?
谢谢你。
有没有可能使MaxEquity设置在不重启EA的情况下工作500次?
例如,如果我在计数器中写500,让它这样工作:假设初始权益为10 000。
在添加到10,000的初始权益后(通过在设置中指定),大额赤字将关闭。
以同样的方式,比方说500倍(举例来说)(毕竟不可能把最初的股权乘以500倍)。
换句话说,差异将出现在你的版本中:在初始权益上增加10 000后=10 000。
专家顾问不需要重新启动,循环将继续 - 在20 000的基础上将增加10 000,30 000 + 10 000,以此类推(例如)500次。比如说。
而且,在每一个等于10 000的增量之后,损失最大的订单将被关闭(或者几个损失的订单,如果你在设置中这样指定)?
不需要做任何重新启动。你需要在平仓后更新初始权益数据,并等待权益从新的初始权益增加。
但根据我的理解,这一切都在编程代码中完成。 我没有编程的能力)。
自然而然。只有一个函数会持续监测权益,并在超过指定值时发送命令关闭无利可图的头寸。然后,在所有的头寸都成功平仓后,必须记录新的权益状态,并继续监控它。
你能告诉我问题可能是什么吗?
我假设我的问题没有包含足够的信息来帮助我)。我将完成我的问题。下面我提供了一个结构,包括我的专家顾问的主要功能。也许这能帮助我找出我所强调的问题所在。
目前,在EA参数中启用/禁用资金管理功能后,我每次都要重新编译EA,才能正确生成报告。
P.S. 也许这与终端全局变量 fxprop_lot 有关?
我想,我的问题中没有足够的信息来帮助我)。我再补充一下我的问题。下面我将提供我的EA的基本功能的结构。也许通过这种方式,就有可能找出我所强调的问题。
目前,在EA参数中启用/禁用资金管理功能后,我每次都要重新编译EA,以便正确生成报告。
P.S. 也许这与终端全局变量fxprop_lot 有关?
如果你认为这就够了,我想就是这样。我们只能等待答案了。我没有。
如果你认为这就足够了,那么是的。我正在等待答复。我没有。
而在下一篇文章中,报告的生成功能...遗憾的是,到目前为止,我的经验还不能让我判断所提供的信息是否足以解决某个特定问题。我不是故意这样做的,如果你这样做,我向你道歉)。问题是,在我看来,我强调的问题的关键点是,在重新编译专家顾问时,一切都能正常工作。但这又是由于我不成熟的经验。请告知需要提供哪些信息来解决这个问题。资金管理 功能或报告生成功能明显出现在问题中。这就是为什么我将给你提供资金管理功能。
void Short_Trade_Report(int Mgc_Src_LP_TS№1,int Mgc_LP01_TS№1,int Mgc_LP02_TS№1,int Mgc_LP03_TS№1,int Mgc_LP04_TS№1,int Mgc_LP05_TS№1,int Mgc_LP06_TS№1, int Mgc_Src_SP_TS№1,int Mgc_SP01_TS№1,int Mgc_SP02_TS№1,int Mgc_SP03_TS№1,int Mgc_SP04_TS№1,int Mgc_SP05_TS№1,int Mgc_SP06_TS№1, int Mgc_Src_LP_TS№2,int Mgc_LP01_TS№2,int Mgc_LP02_TS№2,int Mgc_LP03_TS№2,int Mgc_LP04_TS№2,int Mgc_LP05_TS№2,int Mgc_LP06_TS№2, int Mgc_Src_SP_TS№2,int Mgc_SP01_TS№2,int Mgc_SP02_TS№2,int Mgc_SP03_TS№2,int Mgc_SP04_TS№2,int Mgc_SP05_TS№2,int Mgc_SP06_TS№2, int Mgc_Src_LP_TS№3,int Mgc_LP01_TS№3,int Mgc_LP02_TS№3,int Mgc_LP03_TS№3,int Mgc_LP04_TS№3,int Mgc_LP05_TS№3,int Mgc_LP06_TS№3, int Mgc_Src_SP_TS№3,int Mgc_SP01_TS№3,int Mgc_SP02_TS№3,int Mgc_SP03_TS№3,int Mgc_SP04_TS№3,int Mgc_SP05_TS№3,int Mgc_SP06_TS№3) { #define RA 10000 // Range Array - Размер массива для отчёта double Acc_Bal_Close[RA]; // Массив для баланса на закрытии сделки(-ок) double Acc_Bal_Open[RA]; // Массив для баланса на открытии сделки(-ок) double Price_Open_Pos[RA]; double Price_Stop_Loss[RA]; double TS№1_DS[RA], TS№2_TA[RA], TS№3_SBH[RA]; int pos, handle, dgt, Magic, sign, index; double Swap_P; double Profit_P; double Commission; double Open_Price; double Stop_Loss; string Type_Pos; string comment; string Str_Stop_Loss; //--- ПРОВЕРКА НА КОЛ-ВО ЗНАКОВ В СИМВОЛЕ ДЛЯ РАСЧЁТА ОТСТУПА В СТРОКАХ КОММЕНТАРИЕВ --------------------------------// int digit_string; int digit = MarketInfo(Symbol(),MODE_DIGITS); switch(digit) { case 2 : digit_string = 4; dgt = 100; break; case 3 : digit_string = 5; dgt = 100; break; case 4 : digit_string = 6; dgt = 10000; break; case 5 : digit_string = 7; dgt = 10000; break; default: Print("Неизвестный символ! Количество знаков = ",digit); return(0); } handle = FileOpen("ShortReport.csv",FILE_CSV|FILE_WRITE); if(handle > 0) //1 { FileWrite(handle,"Time Close"+","+"Symbol"+","+"Type"+","+"Lots"+","+"Balance($)"+","+"Stop Loss(p)"+","+"Profit(p)"+","+"TS#1_DS(p)"+","+"TS#2_TA(p)"+","+"TS#3_SBH(p)"); for(pos = 0; pos < OrdersHistoryTotal(); pos++) // 2 { OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY); Commission = OrderCommission(); Swap_P = (OrderSwap()/10)/OrderLots(); Profit_P = (OrderProfit()/10)/OrderLots()+(OrderSwap()/10)/OrderLots(); Open_Price = NormalizeDouble(OrderOpenPrice(),Digits); index = StringFind(OrderComment(),"[sl]",0); if(index != -1) { comment = StringSubstr(OrderComment(),0,StringLen(OrderComment())-4); } else { comment = StringSubstr(OrderComment(),0,StringLen(OrderComment())); } if(OrderType() < 2 && OrderCloseTime() == TimeCurrent() && (OrderMagicNumber() == Mgc_Src_LP_TS№1 || OrderMagicNumber() == Mgc_Src_SP_TS№1 || OrderMagicNumber() == Mgc_LP01_TS№1 || OrderMagicNumber() == Mgc_LP02_TS№1 || OrderMagicNumber() == Mgc_LP03_TS№1 || OrderMagicNumber() == Mgc_LP04_TS№1 || OrderMagicNumber() == Mgc_LP05_TS№1 || OrderMagicNumber() == Mgc_LP06_TS№1 || OrderMagicNumber() == Mgc_SP01_TS№1 || OrderMagicNumber() == Mgc_SP02_TS№1 || OrderMagicNumber() == Mgc_SP03_TS№1 || OrderMagicNumber() == Mgc_SP04_TS№1 || OrderMagicNumber() == Mgc_SP05_TS№1 || OrderMagicNumber() == Mgc_SP06_TS№1)) { TS№1_DS[pos] = Profit_P + Swap_P + Commission; Acc_Bal_Close[pos] = AccountBalance(); Str_Stop_Loss = StringSubstr(comment,StringLen(comment)-digit_string,digit_string); Price_Stop_Loss[pos] = MathAbs((StrToDouble(Str_Stop_Loss)-Open_Price)*dgt); } if(OrderType() < 2 && OrderCloseTime() == TimeCurrent() && (OrderMagicNumber() == Mgc_Src_LP_TS№2 || OrderMagicNumber() == Mgc_Src_SP_TS№2 || OrderMagicNumber() == Mgc_LP01_TS№2 || OrderMagicNumber() == Mgc_LP02_TS№2 || OrderMagicNumber() == Mgc_LP03_TS№2 || OrderMagicNumber() == Mgc_LP04_TS№2 || OrderMagicNumber() == Mgc_LP05_TS№2 || OrderMagicNumber() == Mgc_LP06_TS№2 || OrderMagicNumber() == Mgc_SP01_TS№2 || OrderMagicNumber() == Mgc_SP02_TS№2 || OrderMagicNumber() == Mgc_SP03_TS№2 || OrderMagicNumber() == Mgc_SP04_TS№2 || OrderMagicNumber() == Mgc_SP05_TS№2 || OrderMagicNumber() == Mgc_SP06_TS№2)) { TS№2_TA[pos] = Profit_P + Swap_P + Commission; Acc_Bal_Close[pos] = AccountBalance(); Str_Stop_Loss = StringSubstr(comment,StringLen(comment)-digit_string,digit_string); Price_Stop_Loss[pos] = MathAbs((StrToDouble(Str_Stop_Loss)-Open_Price)*dgt); } if(OrderType() < 2 && OrderCloseTime() == TimeCurrent() && (OrderMagicNumber() == Mgc_Src_LP_TS№3 || OrderMagicNumber() == Mgc_Src_SP_TS№3 || OrderMagicNumber() == Mgc_LP01_TS№3 || OrderMagicNumber() == Mgc_LP02_TS№3 || OrderMagicNumber() == Mgc_LP03_TS№3 || OrderMagicNumber() == Mgc_LP04_TS№3 || OrderMagicNumber() == Mgc_LP05_TS№3 || OrderMagicNumber() == Mgc_LP06_TS№3 || OrderMagicNumber() == Mgc_SP01_TS№3 || OrderMagicNumber() == Mgc_SP02_TS№3 || OrderMagicNumber() == Mgc_SP03_TS№3 || OrderMagicNumber() == Mgc_SP04_TS№3 || OrderMagicNumber() == Mgc_SP05_TS№3 || OrderMagicNumber() == Mgc_SP06_TS№3)) { TS№3_SBH[pos] = Profit_P + Swap_P + Commission; Acc_Bal_Close[pos] = AccountBalance(); Str_Stop_Loss = StringSubstr(comment,StringLen(comment)-digit_string,digit_string); Price_Stop_Loss[pos] = MathAbs((StrToDouble(Str_Stop_Loss)-Open_Price)*dgt); } if(OrderType() == OP_BUY) { Type_Pos = "buy"; } if(OrderType() == OP_SELL) { Type_Pos = "sell"; } if(OrderType() < 2) { FileWrite(handle,TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+","+Symbol()+","+Type_Pos+"," +DoubleToStr(OrderLots(),2)+","+DoubleToStr(Acc_Bal_Close[pos],2)+","+DoubleToStr(Price_Stop_Loss[pos],2)+"," +DoubleToStr(Profit_P+Swap_P+Commission,2)+","+DoubleToStr(TS№1_DS[pos],2)+","+DoubleToStr(TS№2_TA[pos],2)+","+DoubleToStr(TS№3_SBH[pos],2)); } } FileClose(handle); // 2\ } //1 }
请帮助解决这个问题。试着在初始化期间调用 资本管理功能。
但这并不能解决这个问题...