Ответить
15.05.2012, 05:28
Аватар для tai78
tai78 tai78 вне форума Новичок форума
Регистрация: 08.07.2010 / Сообщений: 98
Поблагодарили 11 раз(а) / Репутация: 12
Попробуй с Такими изменениями. А лучше будет убрать риск, чтоб от просадки в валюте работал.
все индикатор adx стал отображатся
03.03.2013, 15:12
Аватар для maks5317
maks5317 maks5317 вне форума Активный участник
Регистрация: 21.12.2012 / Сообщений: 37
Поблагодарили 30 раз(а) / Репутация: 31
1. В исходный код советника добавляем переменные.

Скрытый текст

extern double Risk = 5;
extern int lock_min_step = 30; //ограничение на минимальный шаг, чтобы не получилось каждый пипс новый лок
extern int lock_part = 2; //насколько частей будем дробить убыток который находится в рынке, если 2 то значит на 1/2
string lock_signalsymbol = "EURUSD";
static double lock_eqviti,lock_last, lock_lot;
static bool lock_flag,flagADX,old_uptrend;

2. Функцию start() переименовываем в start_main() и добавляем над ней:
int start(){
double AccountRisk = (AccountBalance()-AccountEquity())/AccountBalance()*100;
if (AccountRisk >Risk) lock_flag=true;
if(OrdersTotal()<1){lock_eqviti=AccountBalance();lock_last = Close[0];}
if(lock_flag) start_lock(); else start_main();
return(0);
}

3. В функцию init() добавляем
int init(){
init_lock();
return(0);
}

4. Ниже добавляем:
int init_lock(){
lock_eqviti=AccountBalance();
lock_lot = 0;
lock_last = Close[0];
flagADX=true;
old_uptrend=false;
signal();
lock_flag = false;
return(0);
}

void start_lock(){
int sig,step;
if(OrdersTotal()<1){init_lock();return(0);}
notakeprofit();
if (AccountEquity()>=lock_eqviti){CloseAllFirstProfit();init_lock();return(0);}
else{
sig=signal();
step =MathAbs(sig);
if (step<lock_min_step) return(0);
if (Ask>lock_last+(step*Point) && sig>0 ){
if (lock_lot==0)lock_lot=NormalizeLot(GetAmountLotFromOpenPos("", OP_SELL,-1)/lock_part);
RefreshRates();
OrderSend(Symbol(),OP_BUY,lock_lot,Ask,5,0,0,"lock",0,Blue);
lock_last = Ask;
}
if (Bid<lock_last-(step*Point) && sig<0){
if (lock_lot==0) lock_lot=NormalizeLot(GetAmountLotFromOpenPos("", OP_BUY,-1)/lock_part);
RefreshRates();
OrderSend(Symbol(),OP_SELL,lock_lot,Bid,5,0,0,"lock",0,Blue);
lock_last = Bid;
}
}
return;
}

int signal() {
int i, j, result;
double smin, smax, SsMax, SsMin, SSP, price,KanalMin,KanalMax;
SSP = MathCeil(150 / iADX(lock_signalsymbol, PERIOD_M5, 14, PRICE_TYPICAL, MODE_MAIN, 1));
for (j = 120; j >= 0; j--) {
SsMax = iHigh(lock_signalsymbol, PERIOD_M5,j);SsMin = iLow(lock_signalsymbol, PERIOD_M5,j);
for (i = j; i <= j + SSP - 1; i++) {
price = iHigh(lock_signalsymbol, PERIOD_M5,i);
if (SsMax < price)SsMax = price;
price = iLow(lock_signalsymbol, PERIOD_M5,i);if (SsMin >= price)SsMin = price;}
smin = SsMin + (SsMax - SsMin)*0.30;smax = SsMax - (SsMax - SsMin)*0.30;
if (iClose(lock_signalsymbol, PERIOD_M5,j) < smin) {flagADX = false; KanalMin = smin;}
if (iClose(lock_signalsymbol, PERIOD_M5,j) > smax) {flagADX = true; KanalMax=smax;}
result = 0;
if (flagADX != old_uptrend && flagADX == true) result = +1;
if (flagADX != old_uptrend && flagADX == false) result = -1;
old_uptrend = flagADX;
}
if (Digits==5)return(MathAbs(NormalizeDouble((KanalMax-KanalMin)/Point/10,0))*result);
if (Digits==4)return(MathAbs(NormalizeDouble((KanalMax-KanalMin)/Point,0))*result);
}

void CloseAllFirstProfit() {
int i, k=OrdersTotal();
for (i=k-1; i>=0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if (OrderType()==OP_BUY || OrderType()==OP_SELL) if (OrderProfit()+OrderSwap()>0) ClosePosBySelect();
k=OrdersTotal();
for (i=k-1; i>=0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if (OrderType()==OP_BUY || OrderType()==OP_SELL) ClosePosBySelect();
}

void ClosePosBySelect() {
if (OrderType()==OP_BUY) OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 100, CLR_NONE);
if (OrderType()==OP_SELL) OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 100, CLR_NONE);
}

double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
double l=0;
int i,k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if (OrderSymbol()==sy || sy=="") if (OrderType()==OP_BUY || OrderType()==OP_SELL) if (op<0 || OrderType()==op) if (mn<0 || OrderMagicNumber()==mn) l+=OrderLots();
return(l);
}

bool notakeprofit(){
bool ok=true;
for (int i=OrdersTotal(); i >=0; i--) if ( OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if (OrderSymbol() == Symbol() && OrderTakeProfit()>0){ OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(),NormalizeDouble(0,Digits), 0, CLR_NONE);ok=false;return(ok);}
return(ok);
}

double NormalizeLot(double lo, bool ro=True, string sy="") {
double l, k;
if (sy=="" || sy=="0") sy=Symbol();
double ls=MarketInfo(sy, MODE_LOTSTEP);
double ml=MarketInfo(sy, MODE_MINLOT);
double mx=MarketInfo(sy, MODE_MAXLOT);
if (ml==0) ml=0.1;
if (mx==0) mx=100;
if (ls>0) k=1/ls; else k=1/ml;
if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;
if (l<ml) l=ml;
if (l>mx) l=mx;
return(l);
}
[свернуть]
как увеличить размер лота в локе?
03.03.2013, 21:34
Аватар для maks5317
maks5317 maks5317 вне форума Активный участник
Регистрация: 21.12.2012 / Сообщений: 37
Поблагодарили 30 раз(а) / Репутация: 31
установил в ilan1.6 pipstep
серьезная машинка получилась!
настройки
LotExponent= 1.95
Lots=0.01
TakeProfit=10
Pipstep=20
и лок конечно настроил!
спасибо за мастер класс!

Последний раз редактировалось maks5317; 03.03.2013 в 21:38.
10.03.2013, 13:09
Аватар для ksv8028
ksv8028 ksv8028 вне форума Местный житель
Регистрация: 10.01.2009 / Сообщений: 51
Поблагодарили 18 раз(а) / Репутация: 18
установил в ilan1.6 pipstep
серьезная машинка получилась!
настройки
LotExponent= 1.95
Lots=0.01
TakeProfit=10
Pipstep=20
и лок конечно настроил!
спасибо за мастер класс!
А можно Ваш код глянуть?
!
12.09.2017, 17:54
Аватар для diodio
diodio diodio вне форума Прохожий
Регистрация: 08.09.2017 / Сообщений: 1
Поблагодарили 0 раз(а) / Репутация: 1
Всем привет, а можете помочь поделиться правильным кодом, этот я вставил в советник, но при компиляции вышли ошибки и в итоге после исправления локировка не работала. Есть добрые люди?)
Ответить


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 11:17. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO