Судя по визуализации индикатора у него и на три бара опоздание.
Сравните гте ставиться точка и где идет перелом цены.
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double blu = iCustom(NULL,0,IndName,0,Shift);
double red = iCustom(NULL,0,IndName,1,Shift);
bool buy = blu>0;
bool sell = red>0;
if(t!=Time[0] && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()))
{
if(buy)
PutOrder(0,Ask);
if(sell)
PutOrder(1,Bid);
t=Time[0];
}
if(AllProfit(0)>Profit && Profit>0 && CountTrades(0)<2)
{
CloseAll(0);
}
if(AllProfit(1)>Profit && Profit>0 && CountTrades(1)<2)
{
CloseAll(1);
}
if(AllProfitM(0)>MProfit && MProfit>0 && CountTrades(0)>1)
{
CloseAllM(0);
}
if(AllProfitM(1)>MProfit && MProfit>0 && CountTrades(1)>1)
{
CloseAllM(1);
}
Comment("\n Buy Profit: ",AllProfit(0),
"\n Sell Profit: ",AllProfit(1),
"\n Side Buy Profit: ",AllProfitM(0),
"\n Side Sell Profit: ",AllProfitM(1));
}
//+------------------------------------------------------------------+
extern int Shift = 0; // бар индикатора
double blu = iCustom(NULL,0,IndName,0,Shift);
double red = iCustom(NULL,0,IndName,1,Shift);
extern int StopLoss = 600; // лось
extern int TakeProfit = 200; // язь
extern int Step = 200; // шаг
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
{
int r=0;
color clr=Green;
double sl=0,tp=0;
if(type==1 || type==3 || type==5)
{
clr=Red;
if(StopLoss>0)
sl=NormalizeDouble(price+Step*3*_Point,_Digits);
if(TakeProfit>0)
tp=NormalizeDouble(price-Step*1*_Point,_Digits);
}
if(type==0 || type==2 || type==4)
{
clr=Blue;
if(StopLoss>0)
sl=NormalizeDouble(price-Step*3*_Point,_Digits);
if(TakeProfit>0)
tp=NormalizeDouble(price+Step*1*_Point,_Digits);
}
r=OrderSend(NULL,type,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,Comm,Magic,0,clr);
return;
}
//--------------------------------------------------------------------
// comment.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int start() // Спец. функция start
{
int Orders=OrdersTotal(); // Количество ордеров
if (Orders==0) // Если кол.орд равно 0
Comment("Ордеров нет"); // Комментарий в угол окна
else // Если есть ордера
Comment("В торговле имеется ",Orders," ордеров." );// Коммент.
return; // Выход
}
//--------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Лот на стоп от депо |
//+------------------------------------------------------------------+
double Lot(){
double lt=lot;
if(lot==0)
{
lt=NormalizeDouble((AccountEquity()*risk)/(100*StopLoss),2);
}
return(lt);
}
Скрипт должен выставлять BUYLIM или SELLLIM на уровень указанный мышкой с величиной лота от заданного SL.
//+------------------------------------------------------------------+
//| Скрипт risk для МТ4 Mouse Lot SL TP.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.mункцql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.mункцql5.com"
#property version "1.00"
#property strict
#property show_inputs
extern double lot = 1;
extern int risk = 10;
extern int StopLoss = 300;
extern int Slippage = 30;
extern double n = 2;
extern int Magic = 123;
int TakeProfit;
//+------------------------------------------------------------------+
//| Лот на стоп от депо |
//+------------------------------------------------------------------+
double Lot(){
double lt=lot;
if(lot==0)
{
lt=NormalizeDouble((AccountEquity()*risk)/(100*StopLoss),2);
}
return(lt);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
double StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
double priceBuy = NormalizeDouble(WindowPriceOnDropped()-StopLevel*Point,Digits);
double priceSell = NormalizeDouble(WindowPriceOnDropped()+StopLevel*Point,Digits);
TakeProfit = NormalizeDouble(n*StopLoss,0);
if(priceBuy<=Ask-StopLevel)
{
SetOrder(NULL, OP_BUYLIMIT, Lot(), priceBuy, priceBuy-StopLoss*Point, priceBuy+(StopLoss*n)*Point, Magic);
}
if(priceSell>=Bid+StopLevel)
{
SetOrder(NULL, OP_SELLLIMIT, Lot(), priceSell, priceSell+StopLoss*Point, priceSell-(StopLoss*n)*Point, Magic);
}
Comment("\n Lot: ",Lot(),
"\n StopLoss: ",StopLoss,
"\n TakeProfit: ",TakeProfit);
}
//+------------------------------------------------------------------+
//| |
//| |
//+------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
double sl=0, double tp=0, int mn=0, datetime ex=0) {
int err, ticket;
if (sy=="" || sy=="0") sy=Symbol();
ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, "", mn, ex, clrNONE);
if (ticket<0) {
err=GetLastError();
}
}
//+----------------------------------------------------------------------------+
другого советника.
вставляется через опцию
ssg