Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
неизвестный номер подокна
Привет, коллеги-кодеры
У кого-нибудь есть решение этой проблемы с вызовами iCustom, я перепробовал все, что мог придумать, но все еще имею то же самое сообщение на вкладке Experts.
неизвестный номер подокна -1 для функции ObjectCreate
С уважением, CJA
Удаление вызовов подокна в индикаторе
Привет, коллеги-кодеры
У кого-нибудь есть решение этой проблемы с вызовами iCustom, я перепробовал все, что только можно придумать, но все равно имею то же сообщение на вкладке Experts.
неизвестный номер подокна -1 для функции ObjectCreate
С уважением, CJAПривет CJA,
У меня есть решение, которое я использую для обхода этой проблемы.
Индикатор, который ваш советник вызывает в iCustom, пытается найти подокно для отрисовки своих объектов.
В большинстве случаев вам не нужно, чтобы индикатор что-то рисовал, достаточно просто предоставить значения индикатора вашему советнику.
Мое решение - сделать копию индикатора и удалить вызовы подокна и процедуры рисования объектов.
Это устранит ошибки подокна и ускорит работу советника.
Затем используйте это новое имя индикатора в утверждениях iCustom для вашего советника.
Я уверен, что, возможно, есть лучшее кодовое решение, но это работает для меня.
Надеюсь, это поможет,
Роберт
Ошибки в подокне iCustom
Привет CJA,
У меня есть решение, которое я использую для обхода этой проблемы.
Индикатор, который ваш советник вызывает в iCustom, пытается найти подокно для отрисовки своих объектов.
В большинстве случаев вам не нужно, чтобы ваш индикатор рисовал что-либо, достаточно просто предоставить значения индикатора вашему советнику.
Мое решение - сделать копию индикатора и удалить вызовы подокна и процедуры рисования объектов.
Это устранит ошибки подокна и ускорит работу советника.
Затем используйте это новое имя индикатора в утверждениях iCustom для вашего советника.
Я уверен, что, возможно, есть лучшее кодовое решение, но это работает для меня.
Надеюсь, это поможет,
РобертСпасибо Роберт - ваше предложение работает, но я подозреваю, что должен быть какой-то другой способ сделать это, хотя я сделал поиск в сети и не нашел никаких решений, которые бы работали или имели какой-либо смысл, просто много вопросов и никаких ответов. Так что еще раз спасибо за помощь.
С уважением, CJA
CJA
Просто предложение: почему бы вам не использовать (при вызове iCustom()) параметр для передачи желаемого номера окна? Что-то вроде : if (ParameterWindowID>=0) then it is from iCustom else do some default code.
Таким образом, вы можете заставить его рисовать объекты даже при вызове из другого кода, и он будет рисовать объекты в правильном месте.
Помогите с кодированием
Привет ребята.
Подскажите, пожалуйста, возможно ли использовать BOLD textFONTtype в отчете об оповещениях по электронной почте? Если да, то как я могу это закодировать?
Большое спасибо за помощь.
Вы имеете в виду, как сохранить в 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]);
}
}
}