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

 

Ошибка при компиляции

Привет всем

У меня следующая ошибка:

'<'-различные типы в сравнении

Я пытаюсь модифицировать следующую строку:

(NonLagMA_2D_S2&&D_S2Switch==1)

на

(Price_NowD_S2&&D_S2Switch==1)

Где проблема?

Извините, не могу загрузить mql-файл. Это не мой скрипт

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

ИН10TION

Badguy:
Всем привет

У меня следующая ошибка:

'<'-различные типы в сравнении

Я пытаюсь модифицировать следующую строку:

(NonLagMA_2D_S2&&D_S2Switch==1)

на

(Price_NowD_S2&&D_S2Switch==1)

Где проблема?

Извините, что не могу загрузить mql-файл. Это не мой скрипт
 

Закрытие нескольких позиций по магическому числу - Помогите

привет всем.

Я новичок в программировании mt4 и ниже приведен мой самый первый советник. Цель этого советника - закрыть все позиции независимо от любой валютной пары на основе одного и того же магического числа.

Скажем, под магическим номером 8675310 у меня есть 2 позиции EURUSD и USDCFh. Советник сможет закрыть все эти пары, когда достигнет определенной цели по прибыли.

Проблема с этим советником заключается в следующем,

Открытая сделка # 1 EURUSD (может закрыться)

Открытая сделка # 2 USDCFh (не может закрыться)

ОН НЕ МОЖЕТ ЗАКРЫТЬ СДЕЛКУ # 2.

Есть идеи?

Спасибо

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

//| Closing_Trade_By_Magic_No_v1 .mq4 |

//| Мой |

//| Торговое программное обеспечение Forex: Торговая платформа MetaTrader 4 |

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

#property copyright "Mine"

#property link "http://www.metaquotes.net"

//---- входные параметры

extern int MagicNumber1=8675310;

extern int Profit1=10;

extern int MagicNumber2=8675311;

extern int Profit2=15;

extern int MagicNumber3=8675312;

extern int Profit3=15;

extern int MagicNumber4=8675313;

extern int Profit4=15;

extern int MagicNumber5=8675314;

extern int Profit5=15;

extern int MagicNumber6=0;

extern int Profit6=10;

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

//| функция инициализации эксперта |

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

int init()

{

onScreenComment(98, "Tengak Initialize...");

//----

//----

return(0);

}

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

//| функция деинициализации эксперта | |

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

int deinit()

{

//----

//----

return(0);

}

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

//| функция запуска эксперта |

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

int start()

{

string myMessage="";

myMessage = myMessage + ProfitLossMonitor(1,MagicNumber1,Pr ofit1,myMessage);

myMessage = myMessage + ProfitLossMonitor(2,MagicNumber2,Pr ofit2,myMessage);

myMessage = myMessage + ProfitLossMonitor(3,MagicNumber3,Pr ofit3,myMessage);

myMessage = myMessage + ProfitLossMonitor(4,MagicNumber4,Pr ofit4,myMessage);

myMessage = myMessage + ProfitLossMonitor(5,MagicNumber5,Pr ofit5,myMessage);

myMessage = myMessage + ProfitLossMonitor(6,MagicNumber6,Pr ofit6,myMessage);

onScreenComment(98,myMessage);

//----

//----

return(0);

}

string ProfitLossMonitor(int myGroupNumber,int myMagicNumber, int myProfit,string myMessage )

{

int total = OrdersTotal();

double MyCurrentProfit=0;

string MyOrderNo="";

for (int cnt = 0 ; cnt < total ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_ TRADES);

if (OrderMagicNumber() == myMagicNumber)

{

MyCurrentProfit += OrderProfit();

MyOrderNo= MyOrderNo + "," + OrderTicket();

}

}

if(MyCurrentProfit>=myProfit)

CloseAll(myMagicNumber);

myMessage="Позиция группы #" + myGroupNumber + " " + myMagicNumber + "=" + myProfit + "(" + DoubleToStr(MyCurrentProfit,2) + " " + MyOrderNo + ")" + "\n" ;

return (myMessage);

}

void CloseAll(int myMagicNumber)

{

int total = OrdersTotal();

for (int cnt = 0 ; cnt < total ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_ TRADES);

if (OrderMagicNumber() == myMagicNumber)

if(OrderType()==OP_BUY)

OrderClose(OrderTicket(),OrderLots( ),Bid,5,Violet);

if(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots( ),Ask,5,Violet);

}

}

void onScreenComment(int myEvent, string myComment)

{

switch (myEvent)

{

case 98: Comment(myComment); break;

}

}

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

Редактирование/удаление сообщения

 
Проблема с этим советником заключается в том, что

Open Transaction # 1 EURUSD (able to close)

Открыть транзакцию # 2 USDCFh (не удается закрыть)

НЕ УДАЕТСЯ ЗАКРЫТЬ ТРАНЗАКЦИЮ # 2.

Есть идеи?

Я предполагаю, что вы запускаете ea на графике EURUSD в то время, когда пытаетесь закрыть ордера. так как эти позиции закрываются нормально. Когда ваш код пытается закрыть позиции USDCHF(немного дислексии?), он использует неправильный бид или аск, цена закрытия используется из валютной пары, к которой прикреплен ea, а не цена символа опциона. Если вы пытаетесь закрыть другую валютную пару на графике, который не соответствует этой валюте, вы должны сначала получить правильную цену, прежде чем пытаться закрыть ее.

keit

edit: Также валюта, USDCHF в данном случае, должна отображаться в окне просмотра рынка в то время, когда вы пытаетесь получить правильные котировки для закрытия ордеров. Если USDCHF не отображается в окне просмотра рынка, вы не сможете получить котировки для этой пары.

 

Спасибо, cockeyedcowboy!

"Вы должны сначала получить правильную цену, прежде чем пытаться закрыть его".

Не могли бы вы поделиться синтаксисом или функцией, которая может выполнить вышеуказанные требования;

 

как не торговать до следующего бара

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

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

Я пробовал следующее;

datetime time0=0;

int start()

if (time0 == Time[0]) return;

{

"код программы"

}

time0 = Time[0];

return(0);

Если я убираю этот бит, я получаю несколько записей в разных барах. Если его убрать, я получаю гораздо меньше записей (с 70 в бэктесте до 4), но с пропущенными записями.

Кто-нибудь знает, что я делаю не так.

Заранее спасибо.

 

Вы можете использовать функцию NewBar() ниже...

Например, if(NewBar(){ ........programming here

bool NewBar() {

static datetime LastTime = 0;

if (Time[0] != LastTime) {

LastTime = Time[0];

return (true);

} else

return (false);

}

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

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

Lux

 

Lux

Спасибо за вашу помощь.

Думаю, я понял, что происходило в программе.

Раньше я проверял наличие нового бара в начале, поэтому программа просто проверяла первый тик нового бара на соответствие моим сигналам, не проверяя остальные тики. Вот почему в бэктесте было мало торговых сигналов.

Теперь я разместил код правильно (т.е. там, где находится моя инстукция ordersend), и он, кажется, работает нормально.

Правильно ли я рассуждаю?

 

Помогите пожалуйста обновить код эксперта.

Есть простой эксперт. Код тоже понятный и простой, но у меня большая проблема - эксперт получил только ОДНУ попытку открыть/закрыть ордер.

Кто-нибудь может помочь исправить это?

Эксперт должен 5-10 раз попытаться открыть/закрыть ордер.

Может быть n=количество попыток, и пожалуйста без "while".

Спасибо большое.

Файлы:
test.mq4  9 kb
 

Мой код для "корректировки лотов после убытка", нужна помощь..спасибо

Мой код ниже для 'adjust lots after loss', но он сделал ошибку массажа"incorrect start position 0 for ArraySort function" во время тестирования. Кто-нибудь может помочь мне исправить это? Нужна помощь...

double AdjtLotsByWinRate( int magicnumber,double NormLots)

{

int i,counter;

int ProfitAndTime[][2];

double Profits[];

//----

ArrayResize(ProfitAndTime,OrdersHistoryTotal());

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

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

{

if (OrderType()<=OP_SELL && OrderMagicNumber()==magicnumber ) // 0 OP_BUY 1 OP_SELL 2 OP_BUYLIMIT 3 OP_SELLLIMIT 4 OP_BUYSTOP 5 OP_SELLSTOP

{

ProfitAndTime[counter][0]=OrderCloseTime();

ProfitAndTime[counter][1]=OrderProfit();

counter++;

}

}

}

ArrayResize(ProfitAndTime,counter);

ArrayResize(Profits,counter);

ArraySort(ProfitAndTime);

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

{

Profits=ProfitAndTime[1];

}

//Print(Profits);

int err=GetLastError();

int WinRate_N=0,WinRate_A=5;

double WinRate;

for (i=counter;i<counter-WinRate_A+1;i--)

{

if (Profits>0){

WinRate_N=WinRate_N+1;

}

else if (Profits<0)

{

WinRate_N=WinRate_N-1;

}

else

{

WinRate_N=WinRate_N+0;

}

}

WinRate=WinRate_N/WinRate_A;

double NewLots;

if (WinRate>=0.7)

{

NewLots=NormLots*1.5;

}

else if (WinRate>=0.5 && WinRate<0.7)

{

NewLots=NormLots*1;

}

else if (WinRate>=0.3 && WinRate<0.5)

{

NewLots=NormLots*0.5;

}

else //if (WinRate<0.3)

{

NewLots=NormLots*0.1;

}

return(NewLots);

}

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