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

 
 

Привет всем,

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

Я пишу пользовательский индикатор, и все, что я хочу, чтобы он считывал текущую цену предложения ТОЛЬКО В НАЧАЛЕ НОВОГО бара. Я не могу просто использовать Open[0], потому что каждый раз, когда приходит новый тик, он будет возвращать значение open для текущего бара. Я хочу, чтобы значение возвращалось только один раз, пока не сформируется новый бар.

Я знаю, что упускаю что-то очень простое, но мне трудно разобраться в этом. Не мог бы кто-нибудь мне помочь?

Спасибо,

-wolfe

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

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

Я пишу пользовательский индикатор, и все, что я хочу, чтобы он считывал текущую цену предложения ТОЛЬКО В НАЧАЛЕ НОВОГО бара. Я не могу просто использовать Open[0], потому что каждый раз, когда приходит новый тик, он будет возвращать значение open для текущего бара. Я хочу, чтобы значение возвращалось только один раз, пока не сформируется новый бар.

Я знаю, что упускаю что-то очень простое, но мне трудно разобраться в этом. Не мог бы кто-нибудь мне помочь?

Спасибо,

-wolfe

Просто храните текущее время бара (Time[0]) - когда это значение изменится, у вас есть новый бар, так что получите свою цену, сохраните новое значение и повторите...

 
omelette:
Просто сохраните текущее время бара (Time[0]) - когда это значение изменится, у вас будет новый бар, так что получите свою цену, сохраните новое значение и повторите...

Спасибо, омлет,

Я должна была подумать об этом, я немного разочарована в себе!

Спасибо за помощь!

 

Может ли кто-нибудь еще показать мне, что я делаю неправильно в этом коде?

Я хотел бы добавить в него больше таймфреймов, например, таймфрейм Daily, но я не знаю, что не так.

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

//| #MTF_Hi_Low_Middle.mq4

//| База из spudfibo.Upgrade by Darkkiller

//: Спасибо Младену за помощь в исправлении.

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

#property indicator_chart_window

extern string note1 = "H4 Higher,Middle,Lower colors";

extern color H4HigherColor = DeepSkyBlue;

extern color H4MiddleColor = Yellow;

extern color H4LowerColor = HotPink;

extern string note2 = "Нарисовать H4 Higher, Lower и Middle?";

extern bool H4HiLow = true;

extern bool H4Mid = true;

extern string note3 = "Цвета D1 Higher, Middle, Lower";

extern color D1HigherColor = DeepSkyBlue;

extern color D1MiddleColor = Yellow;

extern color D1LowerColor = HotPink;

extern string note4 = "Нарисовать D1 Higher, Lower и Middle?";

extern bool D1HiLow = true;

extern bool D1Mid = true;

double HiPrice, LoPrice, Range, D1HiPrice, D1LoPrice, D1Range;

datetime StartTime;

int init()

{

return(0);

}

int deinit()

{

ObjectDelete("H4Higher");

ObjectDelete("H4Lower");

ObjectDelete("H4Middle");

ObjectDelete("D1Higher");

ObjectDelete("D1Lower");

ObjectDelete("D1Middle");

return(0);

}

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

//| Draw Fibo

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

int DrawFibo()

{

///////////////////////////////////////////HILO/////

if(H4HiLow)

{

if(ObjectFind("H4Higher") == -1)

ObjectCreate("H4Higher", OBJ_FIBO, 0, StartTime, HiPrice+Range, StartTime, HiPrice);

else

{

ObjectSet("H4Higher",OBJPROP_TIME2, StartTime);

ObjectSet("H4Higher",OBJPROP_TIME1, StartTime);

ObjectSet("H4Higher",OBJPROP_PRICE1,HiPrice+Range);

ObjectSet("H4Higher",OBJPROP_PRICE2,HiPrice);

}

ObjectSet("H4Higher", OBJPROP_LEVELCOLOR, H4HigherColor);

ObjectSet("H4Higher", OBJPROP_FIBOLEVELS,1);

ObjectSet("H4Higher", OBJPROP_FIRSTLEVEL+0,0.0); ObjectSetFiboDescription("H4Higher", 0, "H4 HIGHER- %$");

ObjectSet("H4Higher", OBJPROP_RAY,true);

ObjectSet("H4Higher", OBJPROP_BACK,true);

ObjectSet("H4Higher", OBJPROP_COLOR,EMPTY);

if(ObjectFind("H4Lower") == -1)

ObjectCreate("H4Lower", OBJ_FIBO, 0, StartTime, LoPrice-Range, StartTime, LoPrice);

else

{

ObjectSet("H4Lower", OBJPROP_TIME2, StartTime);

ObjectSet("H4Lower", OBJPROP_TIME1, StartTime);

ObjectSet("H4Lower", OBJPROP_PRICE1, LoPrice-Range);

ObjectSet("H4Lower", OBJPROP_PRICE2, LoPrice);

}

ObjectSet("H4Lower", OBJPROP_LEVELCOLOR, H4LowerColor);

ObjectSet("H4Lower", OBJPROP_FIBOLEVELS, 1);

ObjectSet("H4Lower", OBJPROP_FIRSTLEVEL+0,0.0); ObjectSetFiboDescription("H4Lower", 0, "H4 LOWER - %$");

ObjectSet("H4Lower", OBJPROP_RAY, true);

ObjectSet("H4Lower", OBJPROP_BACK, true);

ObjectSet("H4Lower", OBJPROP_COLOR, EMPTY);

}

if(D1HiLow)

{

if(ObjectFind("D1Higher") == -1)

ObjectCreate("D1Higher", OBJ_FIBO, 0, D1StartTime, D1HiPrice+D1Range, D1StartTime, D1HiPrice);

else

{

ObjectSet("D1Higher", OBJPROP_TIME2, D1StartTime);

ObjectSet("D1Higher", OBJPROP_TIME1, D1StartTime);

ObjectSet("D1Higher", OBJPROP_PRICE1, D1HiPrice+D1Range);

ObjectSet("D1Higher", OBJPROP_PRICE2, D1HiPrice);

}

ObjectSet("D1Higher", OBJPROP_LEVELCOLOR, D1HigherColor);

ObjectSet("D1Higher", OBJPROP_FIBOLEVELS,1);

ObjectSet("D1Higher", OBJPROP_FIRSTLEVEL+0,0.0); ObjectSetFiboDescription("D1Higher", 0, "H4 HIGHER- %$");

ObjectSet("D1Higher", OBJPROP_RAY, true);

ObjectSet("D1Higher", OBJPROP_BACK, true);

ObjectSet("D1Higher", OBJPROP_COLOR, EMPTY);

if(ObjectFind("D1Lower") == -1)

ObjectCreate("D1Lower", OBJ_FIBO, 0, D1StartTime, D1LoPrice-D1Range, D1StartTime, 1LoPrice);

else

{

ObjectSet("D1Lower", OBJPROP_TIME2, D1StartTime);

ObjectSet("D1Lower", OBJPROP_TIME1, D1StartTime);

ObjectSet("D1Lower", OBJPROP_PRICE1, D1LoPrice-D1Range);

ObjectSet("D1Lower", OBJPROP_PRICE2, D1LoPrice);

}

ObjectSet("D1Lower", OBJPROP_LEVELCOLOR, D1LowerColor);

ObjectSet("D1Lower", OBJPROP_FIBOLEVELS,1);

ObjectSet("D1Lower", OBJPROP_FIRSTLEVEL+0,0.0); ObjectSetFiboDescription("D1Lower", 0, "H4 LOWER - %$");

ObjectSet("D1Lower", OBJPROP_RAY, true);

ObjectSet("D1Lower", OBJPROP_BACK, true);

ObjectSet("D1Lower", OBJPROP_COLOR, EMPTY);

}

/////////////////////////////////////////HILO////////

/////////////////////////////////////////MIDDLE////

if(H4Mid)

if(ObjectFind("H4Middle") == -1)

ObjectCreate("H4Middle", OBJ_FIBO, 0, StartTime, HiPrice, StartTime+PERIOD_H4*60, LoPrice);

else

{

ObjectSet("H4Middle", OBJPROP_TIME2, StartTime);

ObjectSet("H4Middle", OBJPROP_TIME1, StartTime+PERIOD_H4*60);

ObjectSet("H4Middle", OBJPROP_PRICE1, HiPrice);

ObjectSet("H4Middle", OBJPROP_PRICE2, LoPrice);

}

ObjectSet("H4Middle", OBJPROP_LEVELCOLOR, H4MiddleColor);

ObjectSet("H4Middle", OBJPROP_FIBOLEVELS,1);

ObjectSet("H4Middle", OBJPROP_FIRSTLEVEL+0,0.500); ObjectSetFiboDescription("H4Middle", 0, "H4 MIDDLE - %$");

ObjectSet("H4Middle", OBJPROP_RAY, true);

ObjectSet("H4Middle", OBJPROP_BACK, true);

ObjectSet("H4Middle", OBJPROP_COLOR, EMPTY);

}

if(D1Mid)

if(ObjectFind("D1Middle") == -1)

ObjectCreate("D1Middle", OBJ_FIBO, 0, D1StartTime, D1HiPrice, D1StartTime+PERIOD_D1*60, D1LoPrice);

else

{

ObjectSet("D1Middle", OBJPROP_TIME2, D1StartTime);

ObjectSet("D1Middle", OBJPROP_TIME1, D1StartTime+PERIOD_D1*60);

ObjectSet("D1Middle", OBJPROP_PRICE1, D1HiPrice);

ObjectSet("D1Middle", OBJPROP_PRICE2, D1LoPrice);

}

ObjectSet("D1Middle", OBJPROP_LEVELCOLOR, D1MiddleColor);

ObjectSet("D1Middle", OBJPROP_FIBOLEVELS,1);

ObjectSet("D1Middle", OBJPROP_FIRSTLEVEL+0,0.500); ObjectSetFiboDescription("D1Middle", 0, "D1 MIDDLE - %$");

ObjectSet("D1Middle", OBJPROP_RAY, true);

ObjectSet("D1Middle", OBJPROP_BACK, true);

ObjectSet("D1Middle", OBJPROP_COLOR, EMPTY);

}

/////////////////////////////////////////MIDDLE////

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

//| Функция запуска индикатора

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

int start()

{

int shift = iBarShift(NULL, PERIOD_D1, Time[0]) + 1; // H4

HiPrice = iHigh(NULL, PERIOD_H4, shift);

LoPrice = iLow (NULL, PERIOD_H4, shift);

StartTime = iTime(NULL, PERIOD_H4, shift);

D1HiPrice = iHigh(NULL, PERIOD_D1, shift);

D1LoPrice = iLow (NULL, PERIOD_D1, shift);

D1StartTime = iTime(NULL, PERIOD_D1, shift);

if(TimeDayOfWeek(StartTime) == 0/*воскресенье*/)

{/Добавляем пятничные максимумы и минимумы

HiPrice = MathMax(HiPrice, iHigh(NULL,PERIOD_H4, shift+1));

LoPrice = MathMin(LoPrice, iLow(NULL,PERIOD_H4, shift+1));

D1HiPrice = MathMax(D1HiPrice, iHigh(NULL, PERIOD_D1, shift+1));

D1LoPrice = MathMin(D1LoPrice, iLow(NULL, PERIOD_D1, shift+1));

}

Range = HiPrice - LoPrice;

D1Range = D1HiPrice - D1LoPrice;

DrawFibo();

return(0);

}

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

Ниже я прикрепляю оригинал для H4 high low mid

 

Мне нужна помощь, пожалуйста, я пытаюсь использовать дельта-стоп в качестве стоп-лосса

и трейлинг-стопа. Прилагаю советник.

Возможно ли это сделать.

Файлы:
 

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

//| MODIFIED BY Avery T. Horton, Jr. aka TheRumpledOne |

//| |

//| |

//|

//

// google search "therumpledone mt4"

//

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

//| _Fibo_Hi_Low_Middle.mq4

//| База из spudfibo.Upgrade by Darkkiller

//: Спасибо Младену за помощь в исправлении.

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

#property indicator_chart_window

extern int myChartPeriod = 0 ;

extern string note1 = "Higher,Middle,Lower colors";

extern color HigherColor = DeepSkyBlue;

extern color MiddleColor = Yellow;

extern color LowerColor = HotPink;

extern string note2 = "Нарисовать середину?";

extern bool HiLow = true;

extern bool Mid = true;

double HiPrice, LoPrice, Range;

datetime StartTime;

string tChartPeriod, tHigher, tLower, tMiddle ;

int init()

{

if(myChartPeriod == 0) { myChartPeriod = Period() ; }

tChartPeriod = TimeFrameToString(myChartPeriod) ;

tHigher = tChartPeriod + "H" ;

tLower = tChartPeriod + "L" ;

tMiddle = tChartPeriod + "M" ;

return(0);

}

int deinit()

{

ObjectDelete(tHigher);

ObjectDelete(tLower);

ObjectDelete(tMiddle);

return(0);

}

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

//| Draw Fibo

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

int DrawFibo()

{

if(HiLow)

{

if(ObjectFind(tHigher) == -1)

ObjectCreate(tHigher,OBJ_FIBO,0,StartTime,HiPrice+Range,StartTime,HiPrice);

else

{

ObjectSet(tHigher,OBJPROP_TIME2, StartTime);

ObjectSet(tHigher,OBJPROP_TIME1, StartTime);

ObjectSet(tHigher,OBJPROP_PRICE1,HiPrice+Range);

ObjectSet(tHigher,OBJPROP_PRICE2,HiPrice);

}

ObjectSet(tHigher,OBJPROP_LEVELCOLOR,HigherColor);

ObjectSet(tHigher,OBJPROP_FIBOLEVELS,1);

ObjectSet(tHigher,OBJPROP_FIRSTLEVEL+0,0.0);

ObjectSetFiboDescription(tHigher,0,tChartPeriod+" HIGHER- %$");

ObjectSet(tHigher,OBJPROP_RAY,true);

ObjectSet(tHigher,OBJPROP_BACK,true);

ObjectSet(tHigher,OBJPROP_COLOR,EMPTY);

if(ObjectFind(tLower) == -1)

ObjectCreate(tLower,OBJ_FIBO,0,StartTime,LoPrice-Range,StartTime,LoPrice);

else

{

ObjectSet(tLower,OBJPROP_TIME2, StartTime);

ObjectSet(tLower,OBJPROP_TIME1, StartTime);

ObjectSet(tLower,OBJPROP_PRICE1,LoPrice-Range);

ObjectSet(tLower,OBJPROP_PRICE2,LoPrice);

}

ObjectSet(tLower,OBJPROP_LEVELCOLOR,LowerColor);

ObjectSet(tLower,OBJPROP_FIBOLEVELS,1);

ObjectSet(tLower,OBJPROP_FIRSTLEVEL+0,0.0);

ObjectSetFiboDescription(tLower,0,tChartPeriod+" LOWER - %$");

ObjectSet(tLower,OBJPROP_RAY,true);

ObjectSet(tLower,OBJPROP_BACK,true);

ObjectSet(tLower,OBJPROP_COLOR,EMPTY);

}

/////////////////////////////////////////MIDDLE///////////////////////////

if(Mid)

if(ObjectFind(tMiddle) == -1)

ObjectCreate(tMiddle,OBJ_FIBO,0,StartTime,HiPrice,StartTime+myChartPeriod*60,LoPrice);

else

{

ObjectSet(tMiddle,OBJPROP_TIME2, StartTime);

ObjectSet(tMiddle,OBJPROP_TIME1, StartTime+myChartPeriod*60);

ObjectSet(tMiddle,OBJPROP_PRICE1,HiPrice);

ObjectSet(tMiddle,OBJPROP_PRICE2,LoPrice);

}

ObjectSet(tMiddle,OBJPROP_LEVELCOLOR,MiddleColor);

ObjectSet(tMiddle,OBJPROP_FIBOLEVELS,1);

ObjectSet(tMiddle,OBJPROP_FIRSTLEVEL+0,0.500);

ObjectSetFiboDescription(tMiddle,0,tChartPeriod+" MIDDLE - %$");

ObjectSet(tMiddle,OBJPROP_RAY,true);

ObjectSet(tMiddle,OBJPROP_BACK,true);

ObjectSet(tMiddle,OBJPROP_COLOR,EMPTY);

}

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

//| Функция запуска индикатора

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

int start()

{

int shift = iBarShift(NULL,myChartPeriod,Time[0]) + 1; // //

HiPrice = iHigh(NULL,myChartPeriod,shift);

LoPrice = iLow (NULL,myChartPeriod,shift);

StartTime = iTime(NULL,myChartPeriod,shift);

if(TimeDayOfWeek(StartTime)==0/*Воскресенье*/)

{/Добавляем пятничные максимумы и минимумы

HiPrice = MathMax(HiPrice,iHigh(NULL,myChartPeriod,shift+1));

LoPrice = MathMin(LoPrice,iLow(NULL,myChartPeriod,shift+1));

}

Range = HiPrice-LoPrice;

DrawFibo();

// Comment("Period_", tChartPeriod ) ;

return(0);

}

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

string TimeFrameToString(int tf)

{

string tfs;

switch(tf) {

case PERIOD_M1: tfs="M1" ; break;

case PERIOD_M5: tfs="M5" ; break;

case PERIOD_M15: tfs="M15" ; break;

case PERIOD_M30: tfs="M30" ; break;

case PERIOD_H1: tfs="H1" ; break;

case PERIOD_H4: tfs="H4" ; break;

case PERIOD_D1: tfs="D1" ; break;

case PERIOD_W1: tfs="W1" ; break;

case PERIOD_MN1: tfs="MN";

}

return(tfs);

}

Вот как я это сделал.

P.S. почему мои вложения удаляются?

Файлы:
highlower.gif  14 kb
 

MoveStopOnce

Здравствуйте, пытаюсь заставить этот код MoveStopOnce работать, но сделки на продажу не модифицируются кодом, только на покупку. Что-то не так?

//Buys

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

[/code]

[code]

//Sells

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

 

MoveStopOnce

У меня была такая проблема.

Я думаю, вам нужно добавить:

if (OrderType() == OP_BUY)

И использовать OP_SELL для кода продажи.

Big Be

 
Big Be:
У меня была такая проблема.

Я думаю, вам нужно добавить:

if (OrderType() == OP_BUY)

И использовать OP_SELL для кода продажи.

Big Be

Хорошо, я попробую это, когда вернусь домой, но тогда почему это все еще работает с ордерами на покупку?

Спасибо

Причина обращения: