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

 

Я думал, что исправил это, но нет.

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

Было ли это сделано раньше и как вы это делаете, потому что я пытаюсь сделать это уже некоторое время, но мне не везет, и это не так просто, как я думал.

Ниже приведена моя последняя попытка.

Любая помощь была бы замечательной

buysig = Long || Long2 || Long3 || Long4;

sellsig = Short || Short2 || Short3 || Short4;

closebuy=sellsig;

closesell=buysig;

if (curprof>=AccountEquity()*ProfitExit/100.0) {

exit=true;

}

if (last>0 && (Time[0]-last)/(Period()*60)>=CancelOrderBars) {

remorder=true;

}

}

void CheckForOpen() {

int res,tr;

//---- условия продажи

co=CalculateCurrentOrders(Symbol());

if(sellsig && lastsig!=-1) {

if ( Short == true)Print(" Взят короткий сигнал ");

if ( Short2 == true)Print(" Взят сигнал Short2 ");

if ( Short3 == true)Print(" Взят сигнал Short3 ");

if ( Short4 == true)Print(" Взят сигнал Short4 ");

co=CalculateCurrentOrders(Symbol());

if (co==0) {

res = OpenStop(OP_SELLSTOP,LotsRisk(StopLoss), Low[shift]-OrderPipsDiff*Point, StopLoss, TakeProfit1);

}

lastsig=-1;

last=Time[0];

return;

}

//---- условия покупки

co=CalculateCurrentOrders(Symbol());

if(buysig && lastsig!=1) {

if ( Long == true) Print(" Взят длинный сигнал ");

if ( Long2 == true) Print(" Взят сигнал Long2 ");

if ( Long3 == true) Print(" Взят сигнал Long3 ");

if ( Long4 == true) Print(" Взят сигнал Long4 ");

co=CalculateCurrentOrders(Symbol());

if (co==0) {

res = OpenStop(OP_BUYSTOP,LotsRisk(StopLoss), High[shift]+OrderPipsDiff*Point, StopLoss, TakeProfit1);

}

last=Time[0];

lastsig=1;

return;

}

}

bool CloseAtMarket(int ticket,double lot) {

//устойчивое к сбоям закрытие рыночного ордера

bool bres=false; int tr;

tries=0;

while (!bres && tries<OrderTriesNumber) {

RefreshRates();

bres=OrderClose(ticket,lot,OrderClosePrice(),slippage,White);

tries++;

tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }

}

if (!bres) Print("Ошибка при закрытии ордера : ",ErrorDescription(GetLastError()));

}

int OpenStop(int mode,double lot, double prc, int SL, int TP) {

int res,tr,col;

строка mail;

double openprice,sl,tp,stlev;

попытки=0;

stlev=(1+MarketInfo(Symbol(),MODE_STOPLEVEL))*Point;

while (res<=0 && tries<OrderTriesNumber) {

tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }

RefreshRates();

if (mode==OP_SELLSTOP) {

if (prc<=Bid-stlev) openprice=prc;

else openprice=Bid-stlev;

if (SL>0) sl=openprice+SL*Point;

если (TP>0) tp=openprice-TP*Point;

col=Red;

} else

if (mode==OP_BUYSTOP) {

если (prc>=Ask+stlev) openprice=prc;

else openprice=Ask+stlev;

if (SL>0) sl=openprice-SL*Point;

если (TP>0) tp=openprice+TP*Point;

col=Blue;

} else return;

Print(Ask," ",Bid," ",Symbol()," ",mode," ",lot," ",openprice," ",sl," ",tp," ");

res=OrderSend(Symbol(),mode,lot,openprice,slippage,sl,tp,EAName+"_"+ MagicNumber, MagicNumber,0,col);

попытки++;

}

if (res<=0) Print("Ошибка открытия отложенного ордера: ",ErrorDescription(GetLastError()));

return(res);

 

Этот советник даже не компилируется, стоплосс должен быть наименьшей из ваших проблем. Есть 5 переменных, которые имеют случайные пробелы в них или первая буква не заглавная!

 
jturns23:
Этот советник даже не будет компилироваться, стоплосс должен быть самой маленькой из ваших проблем. Есть 5 переменных, которые имеют случайные пробелы в них или первая буква не заглавная!

Вот исправленная версия.

Но он все равно не может открыть ни одной позиции, потому что в коде нет логики для решения, как открывать длинные/короткие позиции.

Файлы:
 
 

Помогите с этим советником

Michel:
Кто такой этот CHinGsMAroonCLK?

Насколько я помню, этот советник не что иное, как 10p3 от elCactus, но может я ошибаюсь...

Посмотрите его тему, возможно, вы найдете то, что ищете: https://www.mql5.com/en/forum/174975

Хорошо... теперь дело в том, что я не могу поставить стоплосс для этого советника... каков код? Можете помочь мне? спасибо.

 

нет торговой зоны - помощь с кодом

Привет всем,

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

Идея заключается в том, чтобы остановить следующую сделку, если ценовой диапазон находится в той же зоне, что и предыдущая сделка. Длинная сделка будет проверять зону для последней длинной сделки с открытой позицией, а короткая сделка будет проверять зону для последней короткой сделки с открытой позицией.

Т.е. если первый LONG на 1.4000, то второй LONG сработает только если цена выйдет из зоны (зона 20 пунктов) менее 1.3990 и более 1.4010.

Спасибо всем.

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

//| Фильтр для бокового рынка - предотвращение множественных сделок в аналогичном ценовом диапазоне и создание зоны, запрещающей торговлю.

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

extern int Zone1 = -10; // (нижняя зона)

extern int Zone2 = 10; // (верхняя зона)

// зона отсутствия торговли между -10 и +10 от предыдущей сделки

bool CheckZone(int type)

{

int cnt = OrdersTotal();

for (int i=0; i < cnt; i++)

{

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != Magic) continue;

if (OrderType() != type) continue;

if (type == OP_BUY)

{

if( (Bid - OrderOpenPrice()) > Zone1*Point && (Bid - OrderOpenPrice()) < Zone2*Point ) return(false);

}

if (type == OP_SELL)

{

if( (OrderOpenPrice()-Ask) > Zone1*Point && (OrderOpenPrice()-Ask) < Zone2*Point ) return(false);

}

}

return (true);

}

 

Решить проблему с советником

Приветствую всех программистов MQL,

Пожалуйста, проверьте следующий код и скажите мне, почему он не размещает сделки на моем демо-счете. Это хороший советник на GJ 1m, но, к сожалению, он не работает. Может ли кто-нибудь исправить его и сделать его пригодным для использования в качестве советника без ошибок.

Заранее благодарен!

С наилучшими пожеланиями.

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

extern int Length1 = 3;

extern int Length2 = 10;

extern int Length3 = 16;

double Histo[];

double MaHisto[];

double up[];

double dn[];

double upMode[];

double dnMode[];

int alertBar;

int init()

{

return(0);

}

int deinit()

{

return(0);

}

int start()

{

int limit;

int counted_bars=IndicatorCounted();

if(counted_bars<0) counted_bars=0;

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(int i = 0 ;i <= limit ;i++)Histo = iMA(Symbol(),0,Length1,0,MODE_EMA,PRICE_CLOSE,i) - iMA(Symbol(),0,Length2,0,MODE_EMA,PRICE_CLOSE,i);

for(int j = 0 ;j <= limit ;j++)MaHisto[j] = iMAOnArray(Histo,0,Length3,0,MODE_EMA,j);

for(int m = 0 ;m <= limit ;m++)

{

if(MaHisto[m+1] 0)

{

up[m] = Open[m]-(5*Point);

if(Bars > alertBar && m == 0)

{

//Alert(Symbol()+""+Period()+" KI LONG ",Ask);

OrderSend(Symbol(),OP_BUY,0.1,Ask,3,25,15,0,0,0,Red);

alertBar = Bars;

}

}

else if(MaHisto[m+1] >= 0 && MaHisto[m]< 0)

{

dn[m] = Open[m]+(5*Point);

if(Bars > alertBar && m == 0)

{

OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,Red);

alertBar = Bars;

}

}

else

{

up[m] = EMPTY_VALUE;

dn[m] = EMPTY_VALUE;

}

if( MaHisto[m] > 0 )

{

upMode[m] = High[m];

dnMode[m] = Low[m];

}

else if( MaHisto[m] < 0 )

{

dnMode[m] = High[m];

upMode[m] = Low[m];

}

}

return(0);

}

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

 
arsenic786:
Привет всем программистам MQL,

Пожалуйста, проверьте следующий код и скажите мне, почему он не размещает сделки на моем демо-счете. Это хороший советник на GJ 1m, но, к сожалению, он не работает. Может ли кто-нибудь исправить это, пожалуйста, и сделать его пригодным для использования в качестве советника без ошибок.

Заранее благодарен!

С наилучшими пожеланиями.

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

extern int Length1 = 3;

extern int Length2 = 10;

extern int Length3 = 16;

double Histo[];

double MaHisto[];

double up[];

double dn[];

double upMode[];

double dnMode[];

int alertBar;

int init()

{

return(0);

}

int deinit()

{

return(0);

}

int start()

{

int limit;

int counted_bars=IndicatorCounted();

if(counted_bars<0) counted_bars=0;

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(int i = 0 ;i <= limit ;i++)Histo = iMA(Symbol(),0,Length1,0,MODE_EMA,PRICE_CLOSE,i) - iMA(Symbol(),0,Length2,0,MODE_EMA,PRICE_CLOSE,i);

for(int j = 0 ;j <= limit ;j++)MaHisto[j] = iMAOnArray(Histo,0,Length3,0,MODE_EMA,j);

for(int m = 0 ;m <= limit ;m++)

{

if(MaHisto[m+1] 0)

{

up[m] = Open[m]-(5*Point);

if(Bars > alertBar && m == 0)

{

//Alert(Symbol()+""+Period()+" KI LONG ",Ask);

OrderSend(Symbol(),OP_BUY,0.1,Ask,3,25,15,0,0,0,Red);

alertBar = Bars;

}

}

else if(MaHisto[m+1] >= 0 && MaHisto[m]< 0)

{

dn[m] = Open[m]+(5*Point);

if(Bars > alertBar && m == 0)

{

OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,Red);

alertBar = Bars;

}

}

else

{

up[m] = EMPTY_VALUE;

dn[m] = EMPTY_VALUE;

}

if( MaHisto[m] > 0 )

{

upMode[m] = High[m];

dnMode[m] = Low[m];

}

else if( MaHisto[m] < 0 )

{

dnMode[m] = High[m];

upMode[m] = Low[m];

}

}

return(0);

}

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

"OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,R ed); "

Вы продаете по цене Ask, а должно быть Bid.

В поле Комментарий должно быть "", а не 0.

25 как SL должно быть Bid+25*Point.

15 как TP должно быть Bid-15*Point.

"R ed" не является цветом.

 
Michel:
"OrderSend(Symbol(),OP_SELL,0.1,Ask,3,25,15,0,0,0,R ed); "

Вы продаете по цене Ask, должно быть Bid.

В поле Комментарий должно быть "", а не 0.

25 как SL должно быть Bid+25*Point.

15 как TP должно быть Bid-15*Point.

"R ed" - это не цвет.

Большое спасибо за поддержку!

Но, я все еще сталкиваюсь с проблемами нулевые знания MQL. Не могли бы вы скопировать код в файл mq4 и протестировать его на демо, а затем сообщить мне, работает ли он нормально. Ваша поддержка будет засчитана как Добрая Помощь Мишель.

С наилучшими пожеланиями,

Кашиф.

 

Нет, извините, сейчас у меня нет времени.

Через несколько часов я сяду на корабль, чтобы вернуться к своей семье на Рождество... и больше никакого ПК...