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

 

Мишель,

Большое спасибо, что нашли время посмотреть код и ответить. Иногда все, что нужно, это еще одна пара глаз! Вы были правы, что ошибка заключалась в делении на 0 с пропущенным столбиком. Теперь все улажено.

BW

 

Объяснение кода - Ind-Fractals-1

кто-нибудь может объяснить, как определяются фракталы в этом(https://c.mql5.com/forextsd/forum/165/ind-fractals-1.mq4) индикаторе. я заметил, что, как и обычные фракталы, они имеют задержку между точкой разворота и фактическим построением фрактала, но я хотел бы знать, как долго длится эта задержка. я думаю, что 15-минутный фрактал рисуется через 40-50 1-минутных баров после установления точки. я также заметил, что цвет фракталов меняется (хотя их положение не меняется), поскольку некоторые 15-минутные фракталы становятся часовыми фракталами.

 

как закодировать следующее?

Привет всем,

Я новичок в metatrader 4. Я знаю не так много о кодировании в mt4.

Я хочу, чтобы metatrader выдавал алерт, когда

1. 30-периодная простая скользящая средняя поднимается выше 60-периодной простой скользящей средней.

2. 30-периодная простая скользящая средняя падает ниже 60-периодной простой скользящей средней.

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

большое спасибо

 
adamk203:
Привет всем,

Я новичок в metatrader 4. Я мало что знаю о кодировании в mt4.

Я хочу, чтобы metatrader выдавал алерт, когда

1. 30-периодная простая скользящая средняя поднимается выше 60-периодной простой скользящей средней.

2. 30-периодная простая скользящая средняя падает ниже 60-периодной простой скользящей средней.

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

большое спасибо

Почему бы не использовать это? Введите MA и выберите 0 для простой, это даст вам линии и стрелки.

Файлы:
 

большое спасибо~~

 
increase:
Почему бы не использовать это? Вставьте свою MA и выберите 0 для простого, это даст вам линии и стрелки.

Привет, я хотел бы, чтобы сигнал появлялся, когда 2 чистая свеча была закончена после пересечения. заранее спасибо.

Файлы:
gbp_4h.gif  19 kb
 

пожалуйста, помогите исправить мой код

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

На самом деле, этот код уже отлично работает. Но я просто устал от простого всплывающего окна Alert, в котором не показан символ. Поэтому я изменил/добавил несколько строк, чтобы попробовать, вот эта часть %%%%%%%%%.

Я не знаю почему, печатайте, комментируйте... неважно, ничего не происходит.

И, что странно, вы можете видеть в части "----alert----", я изменил предупреждение UPBREAK на что-то другое, но оно все еще показывает "UP BREAK". ---- Я уверен, что каждый раз, когда я переписываю код, я компилирую его, удаляю из графика и загружаю снова.

Есть идеи?

#property indicator_chart_window

#import "usr32.dll" // %%%%%%%%%%

int MessageBoxA(int hWnd,string lpText,string lpCaption,int uType); //%%%%%%%%%%

#import //%%%%%%%%%%

int PrevAlertTime = 0;

int init()

{

return(0);

}

int deinit()

{

return(0);

}

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

int start()

{

int i=ObjectsTotal();

int redtotal=0,j,typ1;

double price1,price2,up,down;

color col;

string name1,name2,nameup,namedown,warn1,sym=Symbol();

warn1=sym + "Break Up"; //%%%%%%%%%%

Print(sym); //%%%%%%%%%%%

//----make sure exactly 2 red lines on chart---------------------

for (j=0; j<i; j++)

if(ObjectGet(ObjectName(j),OBJPROP_COLOR)==255 && ObjectType(ObjectName(j))==OBJ_TREND)

{ redtotal++;

if (redtotal==1) name1=ObjectName(j);

if (redtotal==2) name2=ObjectName(j);

}

if (redtotal==2)

{

if(ObjectFind("remind")==0) ObjectDelete("remind");

}

else

{

ObjectCreate("remind",OBJ_LABEL,0,0,0);

ObjectSet("remind", OBJPROP_XDISTANCE,0);

ObjectSet("remind", OBJPROP_YDISTANCE,20);

ObjectSetText("remind", "Keep exactly 2 red lines on chart" ,16,"Times New Roman",Blue);

return(0); // question here: what should I use, 0 or -1 ?

}

//--------decide which line is up / down ---------------------

price1=NormalizeDouble(ObjectGetValueByShift(name1,1),

MarketInfo(Symbol(),MODE_DIGITS));

price2=NormalizeDouble(ObjectGetValueByShift(name2,1),

MarketInfo(Symbol(),MODE_DIGITS));

if (price2>=price1)

{

nameup=name2; namedown=name1;

up=price2; down=price1;

}

else

{ nameup=name1; namedown=name2;

up=price1; down=price2;

}

//-------- alert ----------------------------------------------

if (TimeCurrent() - PrevAlertTime > Period()*60/3)

{

if (Close[1]up)

{ MessageBoxA(NULL,"tupole","11111",0); // %%%%%%%%%%

Print(Symbol()); // %%%%%%%%%%

PrevAlertTime = TimeCurrent();

}

if (Close[1]>=down && Close[0]<down)

{ Alert("DOWN BREAK",Symbol());

PrevAlertTime = TimeCurrent();

}

}

return(0);

}

 

Я нашел, в чем дело:

Обычно я создаю или редактирую код с помощью: "Metaeditor---file---new/open...".

Но я только что обнаружил: после присоединения к графику, а затем некоторых изменений в этом коде, наконец, больше изменений не влияет на график больше (конечно, я скомпилировал !)----- но "Metaeditor--navigator--files---my code..." делают ! Это странно, это должен быть один и тот же код!

 

Помогите с кодом следа

void TrailIt( int byPips ) // based on trailing stop code from MT site... thanks MT!

{

if (byPips >=5)

{

for (int i = 0; i < OrdersTotal(); i++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...

{

if (OrderType() == OP_BUY) {

//if (Bid > (OrderValue(cnt,VAL_OPENPRICE) + TrailingStop * Point)) {

// OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet);

// break;

//}

if (Bid - OrderOpenPrice() > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

if (OrderStopLoss() < Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

} else if (OrderType() == OP_SELL) {

if (OrderOpenPrice() - Ask > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

if ((OrderStopLoss() > Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) ||

(OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(),

Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

}

}

}

} // proc TrailIt()

Это код. Как видно из вложения на одном ордере, он изменяет стоп, но изменяет его в неправильном направлении, и я не могу это исправить. Буду очень признателен за помощь в поиске решения!!!

Файлы:
ordermodify.txt  40 kb
 

Попробуйте это. Похоже, что вы, возможно, пытаетесь изменить ордера с разными символами. Если это так, то Bid и Ask будут извлекать рыночные данные только из символа окна графика, к которому прикреплен советник. Использование MarketData(symbol, MODE_BID) - это способ получить соответствующие данные.

void TrailIt( int byPips ) // based on trailing stop code from MT site... thanks MT!

{

if (byPips >=5)

{

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

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

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

if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...

{

if (OrderType() == OP_BUY)

{

if (bid - OrderOpenPrice() >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))

{

if (OrderStopLoss() < bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)|| (OrderStopLoss() == 0))

{

OrderModify(OrderTicket(), OrderOpenPrice(), bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

else if (OrderType() == OP_SELL)

{

if (OrderOpenPrice() - ask >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))

{

if ((OrderStopLoss() > ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) || (OrderStopLoss() == 0))

{

OrderModify(OrderTicket(), OrderOpenPrice(),ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

}

}

}

return;

}