// ПОДКЛЮЧАЕМЫЕ БИБЛИОТЕКИ С ФУНКЦИЯМИ// ВНЕШНИЕ ПАРАМЕТРЫ// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
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倍にすることは不可能です)。
それはあなたのバージョンで判明する違いです - 最初の株式= 10 000に10 000の増分の後ということ - 。
EAを再起動する必要はなく、2万回に1万回、3万回に1万回と500回(例)繰り返されます。あの
そして、各増分 = 10 000 の後、最大のマイナスを持つ負け注文(または複数の注文 - 設定で指定される)が閉じられるのでしょうか?
ありがとうございます。
MaxEquityの設定を、EAを再起動することなく、例えば500回分動作させることは可能でしょうか?
例えば、カウンターに500と書いた場合、次のように動作させる。最初の資本が10 000だとする。
最初の自己資本10,000に追加した後(設定で指定)、大きな欠点は閉じます。
同じように、(例えば)500倍としましょう(何しろ、最初の資本を500倍にすることは不可能ですから)。
つまり、あなたのバージョンでは、最初の自己資本=10 000に10 000を加えた後に、その差が現れるのです。
Expert Advisor を再起動する必要はなく、20 000 に 10 000、30 000 に 10 000 といった具合に 500 回繰り返されます。例えば、こんな感じです。
そして、10,000の増分ごとに、最も損失の大きい負け注文が決済されます(設定により複数の負け注文も可能)?
再起動の必要はありません。ポジションを決済した後、初期持分データを更新し、新しい初期持分から持分が増加するのを待つ必要があります。
しかし、私の理解では、それはすべてプログラミング・コードで行われるものです。 プログラミングの力がないんです(笑)
当然です。継続的に株式を監視し、指定された値を超えたら不採算ポジションを決済するコマンドを送信する機能が1つだけあります。そして、すべてのポジションが正常に決済された後、新しいエクイティの状態を記録し、それを監視し続ける必要があります。
どのような問題があるのか、教えてください。
私の質問には十分な情報が含まれていないと思われます)質問を完結させます。以下に、私のExpert Advisorの主な機能の構成を示します。もしかしたら、これで私が概説した問題が明らかになるかもしれません。
現在、EAパラメータで資金管理機能を有効/無効にした後、レポートを正しく生成するために、毎回EAを再コンパイルする必要があります。
追伸:もしかしたら、ターミナルのグローバル変数 fxprop_lotと 関係があるのでしょうか?
私の質問には十分な情報がないものと思われます)。質問の補足をします。以下、私のEAの基本的な機能を構造的に説明します。そうすれば、私が指摘したような問題を特定できるかもしれません。
現在、レポートを正しく生成するために、EAパラメータで資金管理機能を有効/無効にした後、毎回EAを再コンパイルする必要があります。
追伸:もしかしたら、ターミナルのグローバル変数fxprop_lotと 関係があるのでしょうか?
それで十分だと思うなら、そうなんでしょうね。答えを待つしかない。持っていないんです。
それで十分だと思うのであれば、そうですね。答えを待っているところです。持っていない。
そして次の記事では、レポート作成機能について...。私のこれまでの経験では、残念ながら、提供された情報が特定の問題に対処するのに十分であるかどうかを判断することはできません。わざとやらないし、やるとしたら謝る)私が思うに、私が取り上げた問題のキーポイントは、Expert Advisorを再コンパイルするとすべてが正しく動作することです。しかし、これも私の未熟な経験によるものです。この問題を解決するためには、どのような情報を提供する必要があるのか、アドバイスをお願いします。資金管理 機能やレポート作成機能が明らかに問題で出てくる。そのために、資金管理機能を持たせるのです。
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 }
問題解決のためにご協力お願いします。初期化中に資本管理機能を呼び出して みた。
でも、それでは問題が解決しない...。