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

削除済み  

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


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


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

削除済み  

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

削除済み  

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 не сложно...

Так что-ли?

削除済み  
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 не сложно...

Так что-ли?

削除済み  
isaev-av:

наверное. я не программист. сейчас попробую. главное чтоб на ТФ работало.
削除済み  
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 наложить МА т.е. МА взять не от графика, а от индикатора?
削除済み  
Что то не получяется. Может быть кто советник поправит?. Всем добрый вечер. Подскажите как правельно написать функцию закрытия ордера через несколько баров после открытия, и чтоб можно было это количество оптимизировать. заранее спасибо.
Файлы:
削除済み  

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


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

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


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

Файлы:
削除済み  
PODLIY16:

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


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

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


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




Спасибо!