Как кодировать? - страница 310

 

...

Для спреда(ов) в реальном времени используйте это:

double currentSpread = MarketInfo(Symbol().MODE_SPREAD);
Premeus:
Я хочу показывать спред в реальном времени внутри советника. Пожалуйста, дайте мне совет.
 

Спасибо, Мальден. Но я знаю, что PHP код для веб-сервера. Я не знаю, чтобы код в стороне EA. Или он предназначен для других.

Пожалуйста, скажите мне больше конкретики. Извините, я новичок в программировании на MQL4.

И я не уверен, как и какая часть программы выполнялась, когда приходила новая цена.

Вся программа или на стороне init() или внутри start().

Я хочу получить информацию о тиках и показать, как я спрашиваю в этой теме.

 

Premeus

Это код metatrader MQl 4, который получает спред для текущего символа. Просто скопируйте его в свой код, и вы сможете получать информацию о спреде таким образом.

Эта строка кода должна быть в start(), чтобы проверять спред на каждом тике (так как он может меняться на каждом тике). После того, как вы вызвали функцию MarketInfo() и переменной currentSpread присвоено значение, используйте currentSpread для любых тестов или дальнейшей обработки.

Premeus:
Спасибо, Мальден. Но я знаю, что PHP код для веб-сервера. Я не знаю, чтобы код в стороне советника. Или это для других.

Пожалуйста, объясните мне более конкретно. Извините, я новичок в программировании на MQL4.

И я не уверен, как и какая часть программы была выполнена при поступлении новой цены.

Вся программа или на стороне init() или внутри start().

Я хочу получить информацию о тиках и показать, как я спрашиваю в этой теме.
 

MartingailExpert_v1.0_Stochastic, как?

Привет!

Подскажите, пожалуйста, почему я не могу вставить Stoploss в тикет отправки ордера?

Когда я его вставляю, советник не работает!

Спасибо!

//+------------------------------------------------------------------+

//| aaa.mq4 |

//| Copyright Š 2007, MetaQuotes Software Corp. |

//| TeamWox Groupware / MetaQuotes Software Corp. |

//+------------------------------------------------------------------+

#property copyright "Copyright Š 2007, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"

extern double step=25;

extern int StepMode=0;

// Ĺńëč StepMode = 0, ňî řŕă ěĺćäó îđäĺđŕěč ôčęńčđîâŕííűé č đŕâĺí step

// Ĺńëč StepMode = 1, ňî řŕă ďîńňĺďĺííî óâĺëč÷čâŕĺňń˙

extern double proffactor=10;

extern double mult=1.5;

extern double lotbuy=0.01;

extern double lotssell=0.01;

extern double per_K=200;

extern double per_D=20;

extern double slow=20;

extern double zoneBUY=20;

extern double zoneSELL=80;

extern double Magicbuy=555;

extern double Magicsell=556;

double openpricebuy,openpricesell,lotbuy2,lotssell2,lastlotbuy,lastlotsell,tpb,tps,cnt,smbuy,smsell,lotstep,

ticketbuy,ticketsell,maxLot,free,balance,lotsell,lotbuy,dig,sig_buy,sig_sell,ask,bid;

int OrdersTotalMagicbuy(int Magicbuy)

{

int j=0;

int r;

for (r=0;r<OrdersTotal();r++)

{

if(OrderSelect(r,SELECT_BY_POS,MODE_TRADES))

{

if (OrderMagicNumber()==Magicbuy) j++;

}

}

return(j);

}

int OrdersTotalMagicsell(int Magicsell)

{

int d=0;

int n;

for (n=0;n<OrdersTotal();n++)

{

if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES))

{

if (OrderMagicNumber()==Magicsell) d++;

}

}

return(d);

}

int orderclosebuy(int ticketbuy)

{

string symbol = Symbol();

int cnt;

for(cnt = OrdersTotal(); cnt >= 0; cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() == symbol && OrderMagicNumber()==Magicbuy)

{

ticketbuy=OrderTicket();OrderSelect(ticketbuy, SELECT_BY_TICKET, MODE_TRADES);lotbuy2=OrderLots() ;

double bid = MarketInfo(symbol,MODE_BID);

RefreshRates();

OrderClose(ticketbuy,lotsbuy2,bid,3,Magenta);

}

}

lotbuy2=lotsbuy;return(0);

}

int orderclosesell(int ticketsell)

{

string symbol = Symbol();

int cnt;

for(cnt = OrdersTotal(); cnt >= 0; cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() == symbol && OrderMagicNumber()==Magicsell)

{

ticketsell=OrderTicket();OrderSelect(ticketsell, SELECT_BY_TICKET, MODE_TRADES);lotssell2=OrderLots() ;

double ask = MarketInfo(symbol,MODE_ASK);

RefreshRates();

OrderClose(ticketsell,lotssell2,ask,3, Lime);

}

}

lotssell2=lotssell;return(0);

}

int start()

{

//----

double profitbuy=0;double profitsell=0;

string symbol = OrderSymbol();

double spread = MarketInfo(symbol,MODE_SPREAD);

double minLot = MarketInfo(symbol,MODE_MINLOT);

if (minLot==0.01){dig=2;maxLot=MarketInfo(symbol,MODE_MAXLOT);}

if (minLot==0.1){dig=1;maxLot=((AccountBalance()/2)/1000);}

if (OrdersTotalMagicbuy(Magicbuy)>0)

{

double smbuy;

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber () == Magicbuy)

{

ticketbuy = OrderTicket();OrderSelect(ticketbuy,SELECT_BY_TICKET, MODE_TRADES);

smbuy = smbuy+OrderLots();openpricebuy = OrderOpenPrice();lastlotbuy = OrderLots();

}

}

{

if (smbuy+(NormalizeDouble((lastlotbuy*mult),dig))<maxLot))

{

if (StepMode==0)

{

if(Ask<=openpricebuy-step*Point)

{

lotbuy2=lastlotbuy*mult;

RefreshRates();ticketbuy=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lotsbuy2,dig),Ask,3,0,0, "MartingailExpert",Magicbuy,0,Blue);

}

}

if(StepMode==1)

{

if(Ask<=openpricebuy-(step+OrdersTotalMagicbuy(Magicbuy)+OrdersTotalMagicbuy(Magicbuy)-2)*Point)

{

lotbuy2=lastlotbuy*mult;

RefreshRates();ticketbuy=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lotsbuy2,dig),Ask,3,0,0, "MartingailExpert",Magicbuy,0,Blue);

}

}

}

}

}

if(OrdersTotalMagicsell(Magicsell)>0)

{

double smsell;

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber () == Magicsell)

{

ticketsell = OrderTicket();OrderSelect(ticketsell,SELECT_BY_TICKET, MODE_TRADES);

smsell = smsell + OrderLots();openpricesell = OrderOpenPrice();lastlotsell = OrderLots();

}

}

{

if (smsell+(NormalizeDouble((lastlotsell*mult),dig))<maxLot))

{

if(StepMode==0)

{

if(Bid>=openpricesell+step*Point)

{

lotssell2=lastlotsell*mult;

RefreshRates();ticketsell=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lotssell2,dig),Bid,3,0,0, "MartingailExpert",Magicsell,0,Red);

}

}

if(StepMode==1)

{

if(Bid>=openpricesell+(step+OrdersTotalMagicsell(Magicsell)+OrdersTotalMagicsell(Magicsell)-2)*Point)

{

lotssell2=lastlotsell*mult;

RefreshRates();ticketsell=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lotssell2,dig),Bid,3,0,0, "MartingailExpert",Magicsell,0,Red);

}

}

}

}

}

// модификация xm7 для изменения способа генерации сигнала. Старый код находится в конце

double Stoch_0 = iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,0);

double Stoch_1 = iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1);

if(OrdersTotalMagicbuy(Magicbuy)<1)

{

if(Stoch_0 > zoneBUY && Stoch_1 <= zoneBUY)

ticketbuy = OrderSend(Symbol(),OP_BUY,lotbuy,Ask,3,0,0, "MartingailExpert",Magicbuy,0,Blue);

}

if(OrdersTotalMagicsell(Magicsell)<1)

{

if(Stoch_0 = zoneSELL)

ticketsell = OrderSend(Symbol(),OP_SELL,lotssell,Bid,3,0,0, "MartingailExpert",Magicsell,0,Red);

}

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicbuy)

{

ticketbuy = OrderTicket();OrderSelect(ticketbuy,SELECT_BY_TICKET, MODE_TRADES);profitbuy = profitbuy+OrderProfit() ;

openpricebuy = OrderOpenPrice();

}

}

tpb = (OrdersTotalMagicbuy(Magicbuy)*proffactor*Point)+openpricebuy;

double bid = MarketInfo(Symbol(),MODE_BID);

if (profitbuy>0)

{

if (Bid>=tpb) orderclosebuy(ticketbuy);

}

for (cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magicsell)

{

ticketsell = OrderTicket();OrderSelect(ticketsell,SELECT_BY_TICKET, MODE_TRADES);profitsell = profitsell+OrderProfit();

openpricesell = OrderOpenPrice();

}

}

tps = openpricesell-(OrdersTotalMagicsell(Magicsell)*proffactor*Point);

double ask = MarketInfo(Symbol(),MODE_ASK);

if (profitsell>0)

{

if (Ask<=tps)orderclosesell(ticketsell);

}

free = AccountFreeMargin();balance = AccountBalance();

for (cnt=0;cnt< OrdersTotal();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicbuy) ticketbuy = OrderTicket();

if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicsell) ticketsell = OrderTicket();

}

if (OrdersTotalMagicbuy(Magicbuy)==0)

{

profitbuy=0;ticketbuy=0;tpb=0;

}

if (OrdersTotalMagicsell(Magicsell)==0)

{

profitsell=0;ticketsell=0;tps=0;

}

Comment("FreeMargin = ",NormalizeDouble(free,0)," Balance = ",NormalizeDouble(balance,0)," maxLot = ",NormalizeDouble(maxLot,dig),"\n",

"Totalbuy = ",OrdersTotalMagicbuy(Magicbuy)," Lot = ",smbuy," Totalsell = ",OrdersTotalMagicsell(Magicsell)," Lot = ",smsell,"\n",

"---------------------------------------------------------------","\n","Profitbuy = ",profitbuy,"\n",

"Profitsell = ",profitsell);

//----

for(int ii=0; ii<2; ii+=2)

{

ObjectDelete("rect "+ii);

ObjectCreate("rect "+ii,OBJ_HLINE, 0, 0, tps);

ObjectSet("rect "+ii, OBJPROP_COLOR, Red);

ObjectSet("rect "+ii, OBJPROP_WIDTH, 1);

ObjectSet("rect "+ii, OBJPROP_RAY, False);

}

for(int rr=0; rr<2; rr+=2)

{

ObjectDelete("rect1"+rr);

ObjectCreate("rect1"+rr,OBJ_HLINE, 0, 0, tpb);

ObjectSet("rect1"+rr, OBJPROP_COLOR, Blue);

ObjectSet("rect1"+rr, OBJPROP_WIDTH, 1);

ObjectSet("rect1"+rr, OBJPROP_RAY, False);

}

return(0);

}
 

...

Это может быть по нескольким причинам, но наиболее распространенными являются следующие:

- стоп-лосс и/или тейк-профит слишком близки к текущей цене

- ваш брокер является брокером типа ECN/STP, в этом случае вы должны сначала выставить ордер со стоп-лоссом и тейк-профитом, установленными на 0, и только после открытия ордера вы можете изменить стоп-лосс и/или тейк-профит до желаемых значений (соблюдая предыдущий пункт, конечно).

pearl1:
Привет!

Кто-нибудь может мне сказать, почему я не могу вставить стоплосс в тикет отправки ордера?

Когда я его вставляю, советник не работает!

Спасибо!
 

Привет всем, я хотел бы узнать, как я могу получить последнюю текущую цену на графике? Я знаю, что я новичок, но я не могу найти ответ. Пожалуйста, помогите. Спасибо.

С уважением,

Терранс

 

...

Зависит от того, какой именно:

- текущая цена покупки - Bid

- текущая цена спроса - Ask

- любая другая цена: используйте нулевой индекс для текущей цены, поэтому Close[0] - текущее закрытие, Open[0] - текущее открытие и так далее.

tkuan77:
Привет всем, я хотел бы узнать, как я могу получить последнюю текущую цену на графике? Я знаю, что я новичок, но я не могу найти ответ. Пожалуйста, помогите. Спасибо.

С уважением,

Терранс
 

Привет, Младен, То, что я пытаюсь сделать, это проверка. Например, если текущая цена выше, скажем, SMA 100, я уменьшу масштаб до более низкого таймфрейма и буду смотреть только на сигнал покупки. Но если я использую Bid или Ask, система не может решить, смотрю ли я в данный момент на длинную или короткую позицию, поскольку Bid я должен искать на длинную позицию и наоборот для Ask (поправьте меня, если я ошибаюсь).

Концепция, которую я имел в виду, чем-то похожа на торговую систему "3 утки" в части проверки. Пожалуйста, посоветуйте мне что-нибудь. Спасибо.

С уважением,

Терранс

mladen:
Зависит от того, какая цена:
- текущая цена бид - Bid

- текущая цена аск - Ask

- любая другая цена: используйте нулевой индекс для текущей цены, таким образом Close[0] - текущее закрытие, Open[0] - текущее открытие и так далее

.
 

...

Терранс

Используйте Close[0] в этом случае. Почти каждый советник использует Close для этой цели, поэтому я думаю, что это сработает и для вас.

tkuan77:
Привет, Младен. То, что я пытаюсь сделать, это проверка. Например, если текущая цена выше, скажем, SMA 100, я уменьшу масштаб до более низкого таймфрейма и буду смотреть только на сигнал покупки. Но если я использую Bid или Ask, система не может решить, смотрю ли я в данный момент на длинную или короткую позицию, поскольку Bid я должен искать на длинную позицию и наоборот для Ask (поправьте меня, если я ошибаюсь).

Концепция, которую я имел в виду, чем-то похожа на торговую систему "3 утки" в части проверки. Пожалуйста, посоветуйте мне здесь. Спасибо.

С уважением,

Терранс
 

Советник не работает между ценовыми движениями

Я заметил, что мой советник не работает между ценовыми движениями на таймфрейме M1. Я знаю, что советник будет выполняться при каждом тике.

Но я видел, что он исполняется каждый раз, когда начинается новый бар.

Я неправильно понимаю?

Есть ли способ заставить советника активироваться при каждом тике?

Я пытаюсь контролировать прибыль и убытки, используя прибыль и убытки не в пунктах. Когда происходит всплеск, советник не закрывает ордер, когда доходит до установки прибыли или убытка, пока не появится новый бар.

Кто-нибудь может помочь мне решить эту проблему.

Я новичок в кодировании советников.

Заранее спасибо.