/*[[ Name := IshimokuEURd Author := Copyright © 2003, Company VIAC.RU AlexSilver Link := http://viac.ru/ Notes := Данный эксперт реализует только один (трендовый) алгоритм открытия позиций по Ишимоку. Парметры по умолчанию для дневных граффиков EURUSD Lots := 1.00 Stop Loss := 130 Take Profit := 600 Trailing Stop := 260 ]]*/ Variables: TOpen(True),TS(0),KS(0),KS1(0),SSA(0),SSB(0),CHS(0),CHSdbuy(0),CHSdsell(0); Defines: TsP(12),KsP(26),SsP(52),Shift(0),CHSdelta(300); var: cnt(0); /* tenkan_sen: Tenkan Sen kijun_sen: Kijun Sen senkou_span_b: Senkou SpanB mode: source of data (MODE_TENKANSEN, MODE_KIJUNSEN, MODE_SENKOUSPANA, MODE_SENKOUSPANB, MODE_CHINKOUSPAN) shift: shift relative to the current bar (number of periods back), where the data is to be taken from Пример: tenkan_sen = iIchimoku(9, 26, 52, MODE_TENKANSEN, 1); iIchimoku(tenkan_sen,kijun_sen,senkou_span_b,mode,shift) */ If Bars<200 or TakeProfit<10 or TrailingStop<10 then Exit; // setup values TS=iIchimoku(TsP, KsP, SsP, MODE_TENKANSEN, Shift); KS=iIchimoku(TsP, KsP, SsP, MODE_KIJUNSEN, Shift); KS1=iIchimoku(TsP, KsP, SsP, MODE_KIJUNSEN, 1); SSA=iIchimoku(TsP, KsP, SsP, MODE_SENKOUSPANA, Shift); SSB=iIchimoku(TsP, KsP, SsP, MODE_SENKOUSPANB, Shift); CHS=iIchimoku(TsP, KsP, SsP, MODE_CHINKOUSPAN, KsP); //CHSdbuy=CHS-CHSdelta*Point; //CHSdsell=CHS+CHSdelta*Point; // If TS=KS then TOpen=True; // if there are no open positions and orders If TotalTrades<1 then {// нет ни одного открытого ордера // на всякий случай проверим, если у нас свободные деньги на счету? // значение 1000 взято для примера, обычно можно открыть 1 лот If FreeMargin<1000 Or Topen=False then Exit; // денег нет - выходим // проверяем на возможность встать в длинную позицию (BUY) If TS>KS and KS>SSB and CHS>=C[KsP] and Ask>=KS then // and CHSdbuyO[1] and C>O and SSA>SSB { SetOrder(OP_BUY,Lots,Ask,2,Bid-StopLoss*Point,Ask+TakeProfit*Point,Beige); // TOpen=False; Exit; // выходим }; // проверяем на возможность встать в короткую позицию (SELL) If TSC[KsP] and C[1]0 then // пользователь выставил в настройках трейлингстоп { // значит мы идем его проверять If (Bid-OrderValue(cnt,VAL_OPENPRICE))>(Point*TrailingStop) then { If OrderValue(cnt,VAL_STOPLOSS)<(Bid-Point*TrailingStop) then { ModifyOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_OPENPRICE), Bid-Point*TrailingStop,OrderValue(cnt,VAL_TAKEPROFIT),Red); Exit; }; }; }; } else // иначе это короткая позиция { // проверим, может уже пора закрываться? If Bid>KS1 then // TS>KS and CHS>C[KsP] and Bid>=SSA { CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),Ask,1,Violet); // закрываем позицию Exit; // выходим }; // проверим - может можно/нужно уже трейлинг стоп ставить? If TrailingStop>0 then // пользователь выставил в настройках трейлингстоп { // значит мы идем его проверять If (OrderValue(cnt,VAL_OPENPRICE)-Ask)>(Point*TrailingStop) then { If OrderValue(cnt,VAL_STOPLOSS)=0 or OrderValue(cnt,VAL_STOPLOSS)>(Ask+Point*TrailingStop) then { ModifyOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_OPENPRICE), Ask+Point*TrailingStop,OrderValue(cnt,VAL_TAKEPROFIT),Red); Exit; }; }; }; }; }; }; // the end.