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

 

неизвестный номер подокна

Привет, коллеги-кодеры

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

неизвестный номер подокна -1 для функции ObjectCreate

С уважением, CJA

 

Удаление вызовов подокна в индикаторе

cja:
Привет, коллеги-кодеры

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

неизвестный номер подокна -1 для функции ObjectCreate

С уважением, CJA

Привет CJA,

У меня есть решение, которое я использую для обхода этой проблемы.

Индикатор, который ваш советник вызывает в iCustom, пытается найти подокно для отрисовки своих объектов.

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

Мое решение - сделать копию индикатора и удалить вызовы подокна и процедуры рисования объектов.

Это устранит ошибки подокна и ускорит работу советника.

Затем используйте это новое имя индикатора в утверждениях iCustom для вашего советника.

Я уверен, что, возможно, есть лучшее кодовое решение, но это работает для меня.

Надеюсь, это поможет,

Роберт

 

Ошибки в подокне iCustom

cosmiclifeform:
Привет CJA,

У меня есть решение, которое я использую для обхода этой проблемы.

Индикатор, который ваш советник вызывает в iCustom, пытается найти подокно для отрисовки своих объектов.

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

Мое решение - сделать копию индикатора и удалить вызовы подокна и процедуры рисования объектов.

Это устранит ошибки подокна и ускорит работу советника.

Затем используйте это новое имя индикатора в утверждениях iCustom для вашего советника.

Я уверен, что, возможно, есть лучшее кодовое решение, но это работает для меня.

Надеюсь, это поможет,

Роберт

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

С уважением, CJA

 

CJA

Просто предложение: почему бы вам не использовать (при вызове iCustom()) параметр для передачи желаемого номера окна? Что-то вроде : if (ParameterWindowID>=0) then it is from iCustom else do some default code.

Таким образом, вы можете заставить его рисовать объекты даже при вызове из другого кода, и он будет рисовать объекты в правильном месте.

 

Помогите с кодированием

Привет ребята.

Подскажите, пожалуйста, возможно ли использовать BOLD textFONTtype в отчете об оповещениях по электронной почте? Если да, то как я могу это закодировать?

Большое спасибо за помощь.

 
codersguru:
Вы имеете в виду, как сохранить в CSV файл?

Проверьте это:

Инструменты - .csv reader

Привет, Гуру,

Есть ли где-нибудь на вашем сайте место, где я мог бы скачать эту dll? Я думаю, что это отличный инструмент, и я уверен, что вы можете написать его лучше, чем я, так что я не буду беспокоиться об этом. Заранее спасибо.

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

 

быстрая модификация советника

Здравствуйте,

Нужна помощь, я пытался изменить приведенный ниже код, но советник постоянно выходил из строя в MT4.

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

Это оригинальный код, он торгует от сигнала к сигналу.

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

//| Signal Begin(Exit Buy) |

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

if (signaldown!=EMPTY_VALUE&&signaldown!=0) Order = SIGNAL_CLOSEBUY;

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

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

//| Signal Begin(Exit Sell) |

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

if (signalup!=EMPTY_VALUE&&signalup!=0) Order = SIGNAL_CLOSESELL;

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

//| Signal End(Exit Sell) |

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

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

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

//| Signal Begin(Entry) |

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

//if (timeprev!=Time[0]){

// timeprev = Time[0];

if (signalup!=EMPTY_VALUE&&signalup!=0)

{

Order = SIGNAL_BUY;

}

if (signaldown!=EMPTY_VALUE&&signaldown!=0){

Order = SIGNAL_SELL;

}

// }

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

//| Signal End |

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

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (100 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Sell

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (100 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error opening SELL order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

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

Кто-нибудь может мне помочь?

 

Я также нашел этот код,

if(data!=iTime(Symbol(),0,0))

{

if(signalup!=EMPTY_VALUE&&signalup!=0)

{

if(openpos()>0)

{

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

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)

{

if(OrderClose(OrderTicket(),lots,Ask,slip))

Print("short was closed");

}

}

}

Print("try open long");

Print(Symbol());

nt=OrderSend(Symbol(),OP_BUY,lots,Ask,slip,0,0,"ab",mn,0,Green);

if(nt>0)

Print("long order was opened");

}

if(signaldown!=EMPTY_VALUE&&signaldown!=0)

{

if(openpos()>0)

{

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

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&OrderMagicNumber()==mn)

{

if(OrderClose(OrderTicket(),lots,Bid,slip))

Print("long was closed");

}

}

}

Print("try open short");

Print(Symbol());

nt=OrderSend(Symbol(),OP_SELL,lots,Bid,slip,0,0,"ab",mn,0,Red);

if(nt>0)

Print("short was opened");

}

data=iTime(Symbol(),0,0);

}

//----

//----

return(0);

}

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

int openpos()

{

int j=0;

int i,n;

n=OrdersTotal();

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==mn&&(OrderType()==OP_SELL||OrderType()==OP_BUY))

j++;

}

return(j);

Может ли любой эксперт сказать мне, какой из них лучше написан?

 

Безубыточность для всех ордеров пары (магия)

Привет всем,

Я хочу собрать все ордера (buy&sell) пары с помощью магии и если они достигают безубытка, все ордера должны быть закрыты.

любые рекомендации приветствуются, спасибо

extern bool PairBreakeven=true;// Безубыточность по паре всех ордеров одной пары/магии

extern double Pairbreakevengain=6;// прирост в пунктах, необходимый для обеспечения безубыточности

extern double Pairbreakeven=3;// безубыток, ордер закрыт, прибыль/проскальзывание 3 пункта

double Pairmovebreakeven;

if(PairBreakeven==true){

if(Pairbreakevengain>0)Pairmovebreakeven(Pairbreakevengain,Pairbreakeven);

CloseBuyOrders(Magic);

CloseSellOrders(Magic);

}

void Pairmovebreakeven(double Pairbreakevengain,double Pairbreakeven){

RefreshRates();

if(OrdersTotal()>0){

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

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic ){

return;

}

}

}

}

int CloseBuyOrders(int Magic){ //op_sell аналогично

int total=OrdersTotal();

for(int cnt=total-1;cnt>=0;cnt--){

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol()){

if(OrderType()==OP_BUY){

OrderClose(OrderTicket(),OrderLots(),Bid,3*mt);

}

}

}

return(0);

}

 

ArraySort с 3 или более измерениями.

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

Я успешно пробовал использовать arraysort для массивов 1 или 2 измерений. Но застрял с 3 измерениями. Насколько я знаю, arraysort использует только первый столбец для сортировки. Может ли кто-нибудь подсказать, как решить эту проблему с сортировкой массивов с 3 или более измерениями?

bool Restart = true;

double arraystore[20][20][20];

double ArrayActual[20] = {1.23,3.65,0.02,5.44,0.92,0.11,1.21,999.0,555.5,0.0001,44.221,1.01,0.002};

void init()

{

if (Restart == true)

{

Go();

Restart = false;

}

}

void start()

{

}

void Go()

{

for (int a = 1; a<=3; a++)

{

for (int b = 1; b<=6; b++)

{

int c = b+ (a-1)*6;

arraystore[a][0] = ArrayActual[c];

arraystore[a][1] = a;

arraystore[a][2] = b +a;

Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);

}

}

ArraySort(arraystore,WHOLE_ARRAY,1,MODE_DESCEND);

for ( a = 1; a<=3; a++)

{

for ( b = 1; b<=6; b++)

{

Print ( arraystore[a][0] + " . " + arraystore[a][1] + " . " + arraystore[a][2]);

}

}

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