NEW 03.04.2016 =============================================================================== =============================================================================== Запрет открытия первых ордеров по связанным парам =============================================================================== =============================================================================== строка 42 =================== //Dimak input string dimakCOM2="Запрет открытия первых ордеров по связанным парам"; // Защита by dimak extern int LevelOrders=5; //Не открывать если есть "M" ордеров (0 - отключение фильтра) extern int LevelSymbols=2; //Как минимум в "N" сетках (0 - отключение фильтра) string Symbol_1_Array[50]; int Buy_1_Array[50]; int Sell_1_Array[50]; string Symbol_2_Array[50]; int Buy_2_Array[50]; int Sell_2_Array[50]; bool res; input string dimakCOM3="####################################################"; // end by dimak //Dimak =================== строка 1500 =================== //Dimak защита от отрытия по связаным парам if ((LevelOrders > 0) && (LevelSymbols > 0 ) && (openorders == 0)) { if (IsThisCurrencyTradeAllowed(dir)==0) { Alert("Currency-Block : ",Symbol()," : ",LevelOrders,"/",LevelSymbols," -- ",dir," -- ",IsThisCurrencyTradeAllowed(dir)); return(-1); } }; //Dimak =================== ====================================================================================== строка 1608 //+-------------------------------------------------------------------------------------+ //| DIMAK защита на открытие ордеров по связанным парам //+-------------------------------------------------------------------------------------+ //Dimak bool IsThisCurrencyTradeAllowed(string Operation) { //выделяем из текущего символа две валюты string Val1=StringSubstr(Symbol(),0,3); string Val2=StringSubstr(Symbol(),3,3); //обнуляем массивы for(int i=0; i<50; i++) { Symbol_1_Array[i]=""; Buy_1_Array[i]=0; Sell_1_Array[i]=0; Symbol_2_Array[i]=""; Buy_2_Array[i]=0; Sell_2_Array[i]=0; } // заполняем массив инструментами int ind_1=0; //индекс массива символов первой валюты int ind_2=0; //индекс массива символов второй валюты for(int i=0; i=LevelOrders) { CountVal_1_Buy++; } if(Sell_1_Array[i]>=LevelOrders) { CountVal_1_Sell++; } } //по второй валюте int CountVal_2_Buy=0; int CountVal_2_Sell=0; for(int i=0; i<50; i++) { if(Symbol_2_Array[i]=="") { break; } if(Buy_2_Array[i]>=LevelOrders) { CountVal_2_Buy++; } if(Sell_2_Array[i]>=LevelOrders) { CountVal_2_Sell++; } } //анализируем по скольким парам открыто больше максимальное кол-во ордеров if(Operation=="Buy") { if(CountVal_1_Buy>=LevelSymbols || CountVal_2_Sell>=LevelSymbols) { // Alert("Запрет!"); return(false); } } if(Operation=="Sell") { if(CountVal_1_Sell>=LevelSymbols || CountVal_2_Buy>=LevelSymbols) { // Alert("Запрет!"); return(false); } } // Alert("Разрешено."); return(true); } //Dimak END ------------------------------------------------------------------------------- NEW 30.03.2016 =============================================================================== =============================================================================== Уменьшать мин. профит пункты после этого колена =============================================================================== =============================================================================== 74 (93) строка (под input int CloseProfit_Points=0 ) =================== //Dimak input int LevelNumToLowerPoints=15; //Уменьшать мин. профит пункты после этого колена input int AmountToLowerPoints=10; //На сколько пунктов уменьшать мин. профит (Points) //Dimak =================== строка 1583 (1825) (под runningpoints = int(runningprofit / (order_lots * Point * MathPow(10, Digits)));) =================== //Dimak - Уменьшать мин. профит пункты после этого колена if ((LevelNumToLowerPoints > 0) && (AmountToLowerPoints > 0 ) && (CloseProfit_Points > 0) && (openorders >= LevelNumToLowerPoints)) runningpoints = runningpoints+AmountToLowerPoints; //Dimak =================== NEW 25.03.2016 =============================================================================== =============================================================================== защита открытия первого ордера в новой сетке по макс. просадке =============================================================================== =============================================================================== В настройки добавляем параметр str 123 (146) (под параметром MaxPercDepo ) ===================== // Dimak extern bool MaxPercDepoOnlyFirst = true; //огранич. % только Первого ордера // Dimak ==================== str 1410 (1456) заменяю =========== if ((MaxPercDepo <1) && (AccountEquity() < AccountBalance() * (1-MaxPercDepo))) return(-1); ============ на ================ // Dimak защита открытия первого ордера по макс. просадке double curprosadka; if ((MaxPercDepo <1) && (AccountEquity() < AccountBalance()* (1-MaxPercDepo))) { if ((MaxPercDepoOnlyFirst==1) && (openorders <=0)) { curprosadka = 100 - (AccountEquity()*100)/AccountBalance(); Alert("Not Opened - ",Symbol()," - Drawdown ",curprosadka,"% > ",MaxPercDepo*100,"%"); return(-1); } if (MaxPercDepoOnlyFirst==0) { // Alert("Not Opened ALL Orders - ",Symbol()," - Drawdown > ",MaxPercDepo,"% Count Sell: ",CountTrades (OP_SELL)," Count Buy: ",CountTrades (OP_BUY)); return(-1); } } // Dimak ===================== ================================================================================================ ================================================================================================