[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 268

[Deleted]  

extern string AlliesO1 = "GBPUSD"; - валюта

string AlliesO[5]; - массив в котором хранятся валюты.



Так я проверяю нужно ли добавлять валюту в массив. (Изначально вместо валют нули, всего валют 5)

if (StringLen (AlliesO1)>2)
{
CountAlliesO++;
AlliesO [0] = AlliesO1;
}





Потом в цикле перебираю валюты и на каждой валюте открываю ордер.

for (int i=0;i<CountAlliesO;i++)

{
l_ticket_4 = OrderSend(AlliesO[i], OP_BUY, Lots, NormalizeDouble(Ask, Digits), l_slippage_8, iif(StopLoss == 0.0, 0, NormalizeDouble(Ask - StopLoss / MathPow(10, Digits), Digits)), iif(TakeProfit == 0.0, 0, NormalizeDouble(Ask +
TakeProfit / MathPow(10, Digits), Digits)), 0, Magic, 0, CLR_NONE);
Print ("Ticket " + Allies[i] + ": " + l_ticket_4);
}



Вот что выдает:

22:05:25 RSI_Valut_Test2 EURUSD,H1: CountAlliesO: 2
22:05:25 RSI_Valut_Test2 EURUSD,H1: CountEnemyO: 2
22:05:25 RSI_Valut_Test2 EURUSD,H1: Allies: GBPUSD // - в цикле распечатываю AlliesO[i].
22:05:25 RSI_Valut_Test2 EURUSD,H1: Allies: GBPUSD
22:05:25 RSI_Valut_Test2 EURUSD,H1: Enemy: USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1: Enemy: USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1: Ticket USDCHF: -1

22:05:25 RSI_Valut_Test2: symbol name for OrderSend function must be a string


Ну в общем как-то так, код весь не могу дать, т.к. просили не распространять... Ну там еще всунуты пару принтов, которые и выводят эти данные... в общем почему выдает что это не строка? если везде объявлена как строка?


Помогите пожалуйста, заранее спасибо.

[Deleted]  

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

[Deleted]  

CountBars - количество баров.

Ticket - номер ордера.

CloseAfterSomeBar (int CountBars, int Ticket)

{
OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)
datetime date = OrderOpenTime();
int BarShift = iBarShift (Symbol(), 0, date, false);
if (CountBars>=BarShift)
{
if (OrderType() = OP_BUY)
OrderClose(Ticket,OrderLots(),Bid, (Ask - Bid) / Point, CLR_NONE);
else
OrderClose(Ticket,OrderLots(),Ask, (Ask - Bid) / Point, CLR_NONE);
}
}


Запускать на каждом тике, с количеством баров не уверен, там может быть -1, или +1, т.к. не знаю точно смещение как считается... ну проверить на М1 не сложно...

Так что-ли?

[Deleted]  
PODLIY16:

CountBars - количество баров.

Ticket - номер ордера.

CloseAfterSomeBar (int CountBars, int Ticket)

{
OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)
datetime date = OrderOpenTime();
int BarShift = iBarShift (Symbol(), 0, date, false);
if (CountBars>=BarShift)
{
if (OrderType() = OP_BUY)
OrderClose(Ticket,OrderLots(),Bid, (Ask - Bid) / Point, CLR_NONE);
else
OrderClose(Ticket,OrderLots(),Ask, (Ask - Bid) / Point, CLR_NONE);
}
}


Запускать на каждом тике, с количеством баров не уверен, там может быть -1, или +1, т.к. не знаю точно смещение как считается... ну проверить на М1 не сложно...

Так что-ли?

[Deleted]  
isaev-av:

наверное. я не программист. сейчас попробую. главное чтоб на ТФ работало.
[Deleted]  
void CloseAfterSomeBar (int CountBars, int Ticket)
{
OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES);
datetime date = OrderOpenTime();
int BarShift = iBarShift (Symbol(), 0, date, false);
if (BarShift>=CountBars)
{
if (OrderType() == OP_BUY)
OrderClose(Ticket,OrderLots(),Bid, (Ask - Bid) / Point, CLR_NONE);
else
OrderClose(Ticket,OrderLots(),Ask, (Ask - Bid) / Point, CLR_NONE);
}
}


Вот это правильное, закрывает ордер как только откроется нужный бар, например на М1 только что пробовал, ордер открылся на девятой минуте, закрылся в 11:01.

 
Подскажите как на индикаторы RSI или Stohastic наложить МА т.е. МА взять не от графика, а от индикатора?
[Deleted]  
Что то не получяется. Может быть кто советник поправит?. Всем добрый вечер. Подскажите как правельно написать функцию закрытия ордера через несколько баров после открытия, и чтоб можно было это количество оптимизировать. заранее спасибо.
Файлы:
[Deleted]  

Попробуйте так там 2 новые переменные:


extern bool IfTrueThenCountBarWork = false; // - если стоит false, то эта функция работать не будет, чтобы работала нужно обязательно ставить true.

extern int CountBar = 0; // - количество баров после которого закрывать. Как считаются бары писал выше.


Надеюсь чем-то помог.

Файлы:
[Deleted]  
PODLIY16:

Попробуйте так там 2 новые переменные:


extern bool IfTrueThenCountBarWork = false; // - если стоит false, то эта функция работать не будет, чтобы работала нужно обязательно ставить true.

extern int CountBar = 0; // - количество баров после которого закрывать. Как считаются бары писал выше.


Надеюсь чем-то помог.




Спасибо!