Спрашивайте! - страница 61

 

Вопрос по коду

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

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

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

Спасибо за ваше время и понимание.

Вот один из немодифицированных разделов, который мне нужно изменить, чтобы ввести комментарий советника.

if(ObjectFind(BuyStop_TrendName) == 0)

{

SetObject("Active" + BuyStop_TrendName,

ObjectGet(BuyStop_TrendName, OBJPROP_TIME1),

ObjectGet(BuyStop_TrendName, OBJPROP_PRICE1) + BuyStop_StepActive*Point,

ObjectGet(BuyStop_TrendName, OBJPROP_TIME2),

ObjectGet(BuyStop_TrendName, OBJPROP_PRICE2) + BuyStop_StepActive*Point,

ObjectGet(BuyStop_TrendName, OBJPROP_COLOR));

SetObject("Prepare" + BuyStop_TrendName,

ObjectGet(BuyStop_TrendName, OBJPROP_TIME1),

ObjectGet(BuyStop_TrendName, OBJPROP_PRICE1) - BuyStop_StepPrepare*Point,

ObjectGet(BuyStop_TrendName, OBJPROP_TIME2),

ObjectGet(BuyStop_TrendName, OBJPROP_PRICE2) - BuyStop_StepPrepare*Point,

ObjectGet(BuyStop_TrendName, OBJPROP_COLOR));

vA = NormalizeDouble(ObjectGetValueByShift("Active"+BuyStop_TrendName,0),Digits);

vM = NormalizeDouble(ObjectGetValueByShift(BuyStop_TrendName,0),Digits);

vP = NormalizeDouble(ObjectGetValueByShift("Prepare"+BuyStop_TrendName,0),Digits);

sl = vA - BuyStop_StopLoss*Point;

tp = vA + BuyStop_TakeProfit*Point;

if(Ask = vP && OrderFind(MagicBuyStop) == false)

if(OrderSend(Symbol(), OP_BUYSTOP, BuyStop_Lot, vA, 3, sl, tp,"", MagicBuyStop, 0, Green) < 0)

Print("Err (", GetLastError(), ") Open BuyStop Price= ", vA, " SL= ", sl," TP= ", tp);

if(Ask = vP && OrderFind(MagicBuyStop) == true &&

glbOrderType == OP_BUYSTOP)

{

OrderSelect(glbOrderTicket, SELECT_BY_TICKET, MODE_TRADES);

if(vA != OrderOpenPrice())

if(OrderModify(glbOrderTicket, vA, sl, tp, 0, Green) == false)

Print("Err (", GetLastError(), ") Modify BuyStop Price= ", vA,

" SL= ", sl, " TP= ", tp);

}

if(Ask < vP && OrderFind(MagicBuyStop) == true &&

glbOrderType == OP_BUYSTOP && AutoClose==true)

{

OrderDelete(glbOrderTicket);

}

}

[/code]

I am not sure of the logic but can I just input the CommentName in the following location? I have not tested this but it compiles fine.

[code]

if(OrderSend(Symbol(), OP_BUYSTOP, BuyStop_Lot, vA, 3, sl, tp,"CommentName", MagicBuyStop, 0, Green) < 0)

Print("Err (", GetLastError(), ") Open BuyStop Price= ", vA, " SL= ", sl," TP= ", tp);

Файлы:
 

Спасибо Coderguru за то, что вы с нами!

У меня вопрос по поводу оповещений.

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

Каким должен быть код. Я прикрепил индикатор sFractals alert.

if(PrevSignal <= 0 )

{

if(ExtDownFractalsBuffer[SIGNAL_BAR] > 0)

{

PrevSignal = 1;

Alert("sFractals (", Symbol(), ", ", Period(), ") - BUY!!!");

}

}

if(PrevSignal >= 0)

{

if(ExtUpFractalsBuffer[SIGNAL_BAR] > 0)

{

PrevSignal = -1;

Alert("sFractals (", Symbol(), ", ", Period(), ") - ПРОДАЕМ!!!");

}

}

Файлы:
sfractals.mq4  8 kb
 
proverbs:
Я не уверен в логике, но могу ли я просто ввести CommentName в следующем месте? Я не тестировал это, но компиляция проходит нормально.

if(OrderSend(Symbol(), OP_BUYSTOP, BuyStop_Lot, vA, 3, sl, tp,"CommentName", MagicBuyStop, 0, Green) < 0)

Print("Err (", GetLastError(), ") Open BuyStop Price= ", vA, " SL= ", sl," TP= ", tp);

Это будет работать нормально. Вы также можете поместить в это место строковую переменную.

 
Drivefast:
Спасибо Coderguru за то, что вы с нами!

У меня вопрос по поводу оповещений.

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

Каким должен быть код. Я прикрепил индикатор sFractals alert.

if(PrevSignal <= 0 )

{

if(ExtDownFractalsBuffer[SIGNAL_BAR] > 0)

{

PrevSignal = 1;

Alert("sFractals (", Symbol(), ", ", Period(), ") - BUY!!!");

}

}

if(PrevSignal >= 0)

{

if(ExtUpFractalsBuffer[SIGNAL_BAR] > 0)

{

PrevSignal = -1;

Alert("sFractals (", Symbol(), ", ", Period(), ") - ПРОДАЕМ!!!");

}

}

Я думаю, что CodersGuru умер или что-то в этом роде. Он не появлялся здесь некоторое время.

В любом случае.... добавьте это утверждение:

PlaySound("alert.wav");

...., где "alert.wav" - это имя файла, который вы хотите воспроизвести.

 
ryanklefas:
Я думаю, что CodersGuru умер или что-то в этом роде. Он давно не появлялся.

В любом случае.... добавьте это утверждение:

PlaySound("alert.wav");

...., где "alert.wav" - имя файла, который вы хотите воспроизвести.

Спасибо, что ответили на мое сообщение.

Я не уверен, где в коде нужно вставить PlaySound("alert.wav");.

Могу ли я просто удалить эту часть? Alert("sFractals(", Symbol(), ", ", Period(), ") - ПОКУПАТЬ!!!");

Или это должно быть что-то вроде этого?

PrevSignal = 1;

PlaySound("alert.wav");

Alert("sFractals (", Symbol(), ", ", Period(), ") - BUY!!!");

 

Да. Просто замените все оповещение на звук.

if(PrevSignal <= 0 )

{

if(ExtDownFractalsBuffer[SIGNAL_BAR] > 0)

{

PrevSignal = 1;

PlaySound("alert.wav");

}

}

if(PrevSignal >= 0)

{

if(ExtUpFractalsBuffer[SIGNAL_BAR] > 0)

{

PrevSignal = -1;

PlaySound("alert.wav");

}

}
 

Спасибо ryanklefas за помощь, теперь все работает так, как я хочу.

 

Спросите о сортировке

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

Функция ArraySort(), в инструкции, может сортировать массивы по 1-му измерению. Я не понимаю, как это может сработать для меня.

Есть ли какие-нибудь предложения по поводу сортировки таблиц данных в MetaTrader?

 

Эксперт Betwen

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

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

и советник B в качестве резервной стратегии.

Я размещаю их на 2 разных парах...

Я хочу, чтобы если советник A находится в просадке, запускался советник B...

когда суммарная прибыль советника A и советника B достигнет некоторой целевой точки...

закрыть все позиции советника A и советника B.

возможно ли это сделать?

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

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

и резервный советник B в качестве резервной стратегии

Я размещаю их на двух разных парах...

Я хочу, чтобы если советник A находится в просадке, запускался советник B...

когда суммарная прибыль советника A и советника B достигнет некоторой целевой точки...

закрыть все позиции советника A и советника B.

возможно ли это сделать?

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