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

 
Tomcat98:
Здравствуйте, программисты,

Как закодировать несколько дополнительных строк кодирования, чтобы эксперт останавливался после выигрышной сделки?

Пипсы в пакете, тогда сделайте стоп эксперта...

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

Tomcat98

Смотрите ниже, если у вас есть опыт кодирования. В противном случае наймите кодера.

1) после каждого закрытия сделки, сделайте цикл в OrdersHistoryTotal() для проверки сделок.

2) проверьте закрытие последней сделки ( OrderCloseTime() ) .

3) если последняя сделка закрыта, проверьте OrderProfit() == profit.

Если прибыль == true, установите EndDayTrade == true && LastTradeDay == DayofYear().

Если в прибыли == false, установите EndDayTrade == false.

4) Когда программа проходит через start(), вам нужно будет вставить ==> if EndDayTrade == false перед началом любой новой сделки. Так как это значение истинно, то оно не будет запускать новые сделки.

5) Вам понадобится функция таймера для проверки наступления нового дня. (предполагается, что новый день - это то, что вы хотите для запуска новых сделок).

Простейшей формой будет if (LastDay != DayofYear() ).

6) в вышеуказанной функции таймера установите LastDay = DayofYear().

if ( LastTradeDay != DayofYear() && EndDayTrade == true)

установите EndDayTrade == false, что начнет все сначала.

переменные, определяемые пользователем

bool EndDayTrade = false;

int LastTradeDay = 9999999;

int LastDay = 999999;

Надеюсь, это объяснение достаточно понятно.

 
dasio:
Привет,

Я пытаюсь объединить эти два кода, но у меня с этим проблемы.

Мне нужно, чтобы когда один отложенный ордер был исполнен, другой должен быть отменен.

Спасибо за вашу отзывчивость.

int opened =0;

int pending =0;

for(int i=OrdersTotal()-1; i>=0; i--)

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() !=Symbol()) continue;

if(OrderMagicNumber()!=Magic) continue;

if(OrderType()==OP_BUY || OrderType()==OP_SELL)

opened++;

else pending++;

}

if (opened>0 && pending>0)

{

for(i=OrdersTotal()-1; i>=0; i--)

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() !=Symbol()) continue;

if(OrderMagicNumber()!=Magic) continue;

if(OrderType()!=OP_BUY && OrderType()!=OP_SELL)

OrderDelete(OrderTicket());

}

} [/PHP]

[PHP] extern int Magic = 68415;

extern int Orario_Inizio = 0;

extern int Orario_Fine = 6;

extern int Buffer = 0;

extern double Lotti = 0.1;

extern int TakeProfit = 10;

extern int StopLoss = 50;

double Massimo;

double Minimo;

int BarCount;

int BarStart;

int BarShift;

double MinLot;

double LotSize;

int i;

int ticket;

string Status;

string BuyStatus1;

string SellStatus1;

double Range;

string CommentoRange;

double pipMultiplier = 1;

int init()

{

}

int start()

{

if (Digits==3 || Digits==5)

{pipMultiplier = 10;}

else {pipMultiplier = 1; }

double TakeProfit1 = TakeProfit*Point*pipMultiplier;

double StopLoss1 = StopLoss*Point*pipMultiplier;

double Buffer1 = Buffer*Point*pipMultiplier;

double StopLossPrice = NormalizeDouble(StopLoss1,Digits);

double TakeProfitPrice = NormalizeDouble(TakeProfit1,Digits);

double BufferPrice = NormalizeDouble(Buffer1,Digits);

//CALCOLA LE BARRE DEL RANGE

if(Orario_Inizio>Orario_Fine)

{

BarCount=24+Orario_Fine-Orario_Inizio;

}

if(Orario_Inizio<Orario_Fine)

{

BarCount=Orario_Fine-Orario_Inizio;

}

//CALCOLA IL MASSIMO E IL MINIMO DEL RANGE

if(Hour()>=Orario_Fine)

{

BarStart=Hour()-Orario_Fine;

BarShift=BarStart+BarCount;

Minimo=iLow(NULL,PERIOD_H1,BarStart);

Massimo=0;

for(i=BarStart;i<=BarShift;i++)

{

Massimo=MathMax(Massimo,iHigh(NULL,PERIOD_H1,i));

Minimo=MathMin(Minimo,iLow(NULL,PERIOD_H1,i));

Range=(Massimo-Minimo)/Point;

}

}

else

{

Massimo=0;

Minimo=0;

return(0);

}

//CONTROLLA SE E' L'ORARIO PER POTER TRADARE

if(Hour()==Orario_Fine && OrdersTotal()<2)

{

//CONTROLLA SE IL MASSIMO E' STATO ROTTO. CONDIZIONE BUY

double OpenPriceBuy = NormalizeDouble((Massimo+BufferPrice),Digits);

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lotti,OpenPriceBuy,0,OpenPriceBuy-StopLossPrice,OpenPriceBuy+TakeProfitPrice,NULL,Magic,0,Blue);

//CONTROLLA SE IL MINIMO E' STATO ROTTO. CONDIZIONE SELL

double OpenPriceSell = NormalizeDouble((Minimo-BufferPrice),Digits);

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lotti,OpenPriceSell,0,OpenPriceSell+StopLossPrice,OpenPriceSell-TakeProfitPrice,NULL,Magic,0,Red);

if (ticket != -1)

return(0);

}

}

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

 

dasio

Попробуйте поместить весь этот код в начало процедуры start(). Вам, вероятно, придется отфильтровать некоторые другие пути, когда вы открываете отложенные ордера, но если вы поместите этот код в начало, он очистит отложенные ордера, если любой из ранее открытых отложенных ордеров станет "обычным" ордером.

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

Привет,

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

Сейчас. Я пытаюсь сделать это самостоятельно, но у меня ничего не получается.

Предпосылка Я хочу использовать этот индикатор на автономном графике ренко.

Моя цель - построить график выше или ниже свечи, как долго длилось построение.

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

Так как я могу это закодировать?

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

 

Не могу понять, почему этот код пытается изменить закрытые ордера

Я добавил OrderCloseTime() в оба оператора if, думая, что это положит конец ошибке invalid ticket for ordermodify function, но время от времени мой советник теряет контроль над всеми ордерами и каким-то образом подмешивает в них закрытую сделку и непрерывно пытается модифицировать ее снова и снова, создавая огромные лог-файлы, и не продолжает торговлю, пока я не перезапущу MT4. Я не совсем понимаю, как он подхватывает закрытый ордер, может быть, пока он в процессе модификации всех ордеров, один из них закрывается за это короткое время и отбрасывает его? Как я уже сказал, это произойдет, возможно, дважды из 30-50 сделок в день.

У кого-нибудь есть идеи, как положить этому конец?

if (NewOrdersPlaced_s3) {

if (flag_s3 == TRUE) {

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {

OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

//===

while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))

{Sleep(1000);RefreshRates();}

//===

NewOrdersPlaced_s3 = FALSE;

}

}
 

Проблемы с сигналом

mladen

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

Mastercash:
Mladen Спасибо, я посмотрел внимательно....Im все еще экспериментируя код.Я буду уведомлять, когда через.
 

...

2 мысли :

1. Если вы собираетесь отправить его, то я думаю, что единственным разумным способом является отправка почты, и в таком случае почему бы вам просто не использовать одну из программ для рассылки спама по электронной почте, которые существуют в природе?

2. Отправка сигналов имеет слишком много проблем (это мое мнение, некоторые проблемы с отправкой практически неразрешимы). Так почему бы вам не перевернуть логику: вместо отправки сделать код, который будет читать (с именем пользователя, пассом и так далее ...) из заданного места, и таким образом вы решите почти все проблемы, которые не может решить отправка (включая предотвращение использования с нескольких IP одновременно).

Итак, просто некоторые мысли ...

Mastercash:
mladen Большое спасибо, код теперь работает.Оповещение больше не повторяется.Пожалуйста, я хочу разместить скрипты, которые будут отправлять торговые оповещения нескольким получателям, например, сотням, как я могу это сделать...Есть ли компании, которые могут справиться с этим, которые вы или кто-нибудь на этом форуме знаете.
 

Попробуйте что-то вроде этого:

#include

#define PAUSE_BEFORE_RETRY 1000

#define NumberOfReTries 3

if (NewOrdersPlaced_s3 && flag_s3 == TRUE)

{

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--)

{

if (!OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != MagicNumber_3) continue;

for (int retry=0; retry<NumberOfReTries; retry++)

{

OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

int error = GetLastError();

switch (error)

{

case ERR_SERVER_BUSY:

case ERR_NO_CONNECTION:

case ERR_INVALID_PRICE:

case ERR_OFF_QUOTES:

case ERR_BROKER_BUSY:

case ERR_TRADE_CONTEXT_BUSY:

Sleep(PAUSE_BEFORE_RETRY);

continue;

case ERR_PRICE_CHANGED:

case ERR_REQUOTE:

continue;

default:

retry=NumberOfReTries;

}

}

NewOrdersPlaced_s3 = FALSE;

}

}
beakon:
Я добавил OrderCloseTime() в оба оператора if, думая, что это положит конец этой ошибке недействительного тикета для функции ordermodify, но время от времени мой советник теряет контроль над всеми ордерами и каким-то образом подмешивает в них закрытую сделку и постоянно пытается изменить ее снова и снова, создавая огромные файлы журнала, и не продолжает торговлю, пока я не перезапущу MT4. Я не совсем понимаю, как он подхватывает закрытый ордер, может быть, пока он в процессе модификации всех ордеров, один из них закрывается за это короткое время и отбрасывает его? Как я уже сказал, это произойдет, возможно, дважды из 30-50 сделок в день.

У кого-нибудь есть идеи, как положить этому конец?

if (NewOrdersPlaced_s3) {

if (flag_s3 == TRUE) {

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {

OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

//===

while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))

{Sleep(1000);RefreshRates();}

//===

NewOrdersPlaced_s3 = FALSE;

}

}
 

Решения для оповещения

Я думаю, что мне нужно больше объяснений по этому поводу, не могли бы вы подсказать мне, как написать и настроить код, который поможет мне отправить оповещение всем моим клиентам одновременно.Это путем хранения их адреса электронной почты в базе данных.....but как будет серверный язык, например, php скрипт, собирать оповещения от платформы mt4 автоматически? ...... Я думаю, что это проблема, если есть способ, он может быть отправлен на несколько мобильных телефонов или адрес электронной почты.Ваш совет, пожалуйста?

mladen:
2 мысли :

1. Если вы собираетесь отправить его, то я думаю, что единственным разумным способом является отправка почты, и в этом случае почему бы вам просто не использовать одну из программ для рассылки спама по электронной почте, которые существуют в природе?

2. Отправка сигналов имеет слишком много проблем (это мое мнение, некоторые проблемы с отправкой практически неразрешимы). Так почему бы вам не перевернуть логику: вместо отправки сделать код, который будет считываться (с именем пользователя, пассом и так далее ...) из определенного места, и таким образом у вас будут решены почти все проблемы, которые не может решить отправка (включая предотвращение использования с нескольких IP одновременно).

Итак, просто некоторые мысли ...
 

Mastercash

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

Что касается "сбора оповещений": вам нужно иметь что-то, что будет"экспортировать" его в какой-то читаемый формат, который будет распознан затем программным обеспечением по вашему выбору, которое будет распространять сигналы или предоставлять доступ к этому сигналу.

PS: сигнальные сервисы намного сложнее, чем кажется на первый взгляд, и, если вы планируете создать такой сервис, вы можете рассчитывать на значительные затраты, чтобы он работал как надо.

Mastercash:
Я думаю, что мне нужно больше объяснений по этому поводу, вы можете просто подсказать мне, как написать и настроить код, который поможет мне отправить оповещение всем моим клиентам одновременно.Это путем хранения их адреса электронной почты в базе данных.....but как будет серверный язык, например, php скрипт, собирать оповещения от платформы mt4 автоматически? ...... Я думаю, что это проблема, если есть способ, он может быть отправлен на несколько мобильных телефонов или адрес электронной почты.Ваш совет, пожалуйста?